Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ResidueGridScoresFeatures.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 protocols/features/ResidueGridScoresFeatures.cc
11 /// @brief detailed per atom scores of Scoring Grids
12 /// @author Sam DeLuca
13 
18 
19 #include <basic/database/schema_generator/PrimaryKey.hh>
20 #include <basic/database/schema_generator/ForeignKey.hh>
21 #include <basic/database/schema_generator/Column.hh>
22 #include <basic/database/schema_generator/Schema.hh>
23 #include <basic/database/sql_utils.hh>
24 
25 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
26 #include <basic/database/insert_statement_generator/RowData.hh>
27 
28 #include <utility/tools/make_vector.hh>
29 
30 #include <utility/excn/Exceptions.hh>
31 #include <core/pose/util.hh>
32 
33 namespace protocols {
34 namespace features{
35 
37 {
38 
39 }
40 
42 {
43 
44 }
45 
47 {
48  return new ResidueGridScoresFeatures;
49 }
50 
52 {
53  return "ResidueGridScoresFeatures";
54 }
55 
57 {
58 
59 }
60 
62 {
63 
64 }
65 
66 
68 {
69 
70 }
71 
73 {
74  return "ResidueGridScoresFeatures";
75 }
76 
77 void ResidueGridScoresFeatures::write_schema_to_db(utility::sql_database::sessionOP db_session) const
78 {
79  using namespace basic::database::schema_generator;
80  Column struct_id("struct_id",new DbUUID());
81  Column grid_name("grid_name",new DbTextKey());
82  Column seqpos("seqpos",new DbInteger());
83  Column atomno("atomno",new DbInteger());
84  Column score("score",new DbReal());
85 
86  Columns primary_key_columns;
87  primary_key_columns.push_back(struct_id);
88  primary_key_columns.push_back(grid_name);
89  primary_key_columns.push_back(seqpos);
90  primary_key_columns.push_back(atomno);
91  PrimaryKey primary_key(primary_key_columns);
92 
93  Columns foreign_key_columns;
94  foreign_key_columns.push_back(struct_id);
95  foreign_key_columns.push_back(seqpos);
96  foreign_key_columns.push_back(atomno);
97 
98  utility::vector1< std::string > reference_columns;
99  reference_columns.push_back("struct_id");
100  reference_columns.push_back("seqpos");
101  reference_columns.push_back("atomno");
102  ForeignKey foreign_key(foreign_key_columns,"residue_atom_coords",reference_columns,true);
103 
104  Schema table("residue_grid_scores",primary_key);
105  table.add_foreign_key(foreign_key);
106  table.add_column(score);
107 
108  table.write(db_session);
109 
110 
111 }
112 
114 {
115  utility::vector1<std::string> dependencies;
116  dependencies.push_back("ResidueConformationFeatures");
117  return dependencies;
118 }
119 
121  core::pose::Pose const & pose,
122  utility::vector1< bool > const & relevant_residues,
123  boost::uuids::uuid struct_id,
124  utility::sql_database::sessionOP db_session)
125 {
126  using basic::database::insert_statement_generator::InsertGenerator;
127  using basic::database::insert_statement_generator::RowDataBaseOP;
128  using basic::database::insert_statement_generator::RowData;
129 
131 
132  if (grid_manager->size()==0){
133  utility_exit_with_message("In order to use the ResidueGridScoresFeatures reporter you must define at least one scoring grid");
134  }
135 
139  grid_manager->initialize_all_grids(center);
140  grid_manager->update_grids(pose,center);
141 
142 
143 
144  InsertGenerator grid_insert("residue_grid_scores");
145  grid_insert.add_column("struct_id");
146  grid_insert.add_column("grid_name");
147  grid_insert.add_column("seqpos");
148  grid_insert.add_column("atomno");
149  grid_insert.add_column("score");
150 
151  RowDataBaseOP struct_id_data = new RowData<boost::uuids::uuid>("struct_id",struct_id);
152  for (Size i = pose.conformation().chain_begin(chain_id); i <= pose.conformation().chain_end(chain_id); ++i) {
153 
154  if(!relevant_residues[i]) continue;
155 
156  RowDataBaseOP seqpos_data = new RowData<core::Size>("seqpos",i);
157 
158  core::conformation::Residue const & residue(pose.residue(i));
159  for(Size atomno = 1; atomno <= residue.natoms();++atomno)
160  {
161  RowDataBaseOP atomno_data = new RowData<core::Size>("atomno",atomno);
162  std::map<std::string,core::Real> atom_map = grid_manager->atom_score(pose,residue,atomno);
163  for(std::map<std::string,core::Real>::const_iterator score_it = atom_map.begin(); score_it != atom_map.end();++score_it)
164  {
165  RowDataBaseOP grid_name_data = new RowData<std::string>("grid_name",score_it->first);
166  RowDataBaseOP score_data = new RowData<core::Real>("score",score_it->second);
167  grid_insert.add_row(
168  utility::tools::make_vector(struct_id_data,seqpos_data,atomno_data,grid_name_data,score_data));
169  }
170  }
171  }
172  grid_insert.write_to_database(db_session);
173  return 0;
174 }
175 
177  utility::tag::TagPtr const tag,
179  protocols::filters::Filters_map const & /*filters*/,
180  protocols::moves::Movers_map const & /*movers*/,
181  core::pose::Pose const & /*pose*/)
182 {
183  if(!tag->hasOption("chain"))
184  {
185  throw utility::excn::EXCN_RosettaScriptsOption("The ResidueGridScoresFeatures reporter requires a Chain tag");
186 
187  }
188 
189  chain_ = tag->getOption<char>("chain");
190 
191 }
192 
193 }
194 }