23 #include <basic/database/sql_utils.hh>
24 #include <basic/database/schema_generator/PrimaryKey.hh>
25 #include <basic/database/schema_generator/ForeignKey.hh>
26 #include <basic/database/schema_generator/Column.hh>
27 #include <basic/database/schema_generator/Schema.hh>
31 #include <numeric/xyzVector.hh>
32 #include <numeric/xyz.functions.hh>
36 #include <utility/vector1.hh>
37 #include <utility/sql_database/DatabaseSessionManager.hh>
40 #include <boost/foreach.hpp>
41 #define foreach BOOST_FOREACH
44 #include <cppdb/frontend.h>
45 #include <boost/uuid/uuid_io.hpp>
47 #include <utility/exit.hh>
49 #include <basic/options/keys/OptionKeys.hh>
50 #include <basic/options/keys/in.OptionKeys.gen.hh>
51 #include <basic/options/option.hh>
65 using utility::sql_database::sessionOP;
66 using cppdb::statement;
70 if(basic::options::option[ basic::options::OptionKeys::in::add_orbitals] != 1){
71 utility_exit_with_message(
"Trying to run features test without orbitals! Pass the flag -add_orbitals!" );
78 if(basic::options::option[ basic::options::OptionKeys::in::add_orbitals] != 1){
79 utility_exit_with_message(
"Trying to run features test without orbitals! Pass the flag -add_orbitals!" );
100 using namespace basic::database::schema_generator;
102 Column struct_id(
"struct_id",
new DbUUID());
103 Column resNum1(
"resNum1",
new DbInteger());
104 Column resName1(
"resName1",
new DbText());
105 Column orbNum1(
"orbNum1",
new DbInteger());
106 Column orbName1(
"orbName1",
new DbText());
107 Column resNum2(
"resNum2",
new DbInteger());
108 Column resName2(
"resName2",
new DbText());
109 Column hpolNum2(
"hpolNum2",
new DbInteger());
110 Column htype2(
"htype2",
new DbText());
111 Column OrbHdist(
"OrbHdist",
new DbReal());
112 Column cosAOH(
"cosAOH",
new DbReal());
113 Column cosDHO(
"cosDHO",
new DbReal());
114 Column chiBAOH(
"chiBAOH",
new DbReal());
115 Column chiBDHO(
"chiBDHO",
new DbReal());
116 Column AOH_angle(
"AOH_angle",
new DbReal());
117 Column DHO_angle(
"DHO_angle",
new DbReal());
118 Column chiBAHD(
"chiBAHD",
new DbReal());
119 Column cosAHD(
"cosAHD",
new DbReal());
121 Columns primary_key_columns;
122 primary_key_columns.push_back(struct_id);
123 primary_key_columns.push_back(resNum1);
124 primary_key_columns.push_back(orbName1);
125 primary_key_columns.push_back(resNum2);
126 primary_key_columns.push_back(hpolNum2);
127 PrimaryKey primary_key(primary_key_columns);
129 Columns foreign_key_columns1;
130 foreign_key_columns1.push_back(struct_id);
131 foreign_key_columns1.push_back(resNum1);
133 reference_columns1.push_back(
"struct_id");
134 reference_columns1.push_back(
"resNum");
135 ForeignKey foreign_key1(foreign_key_columns1,
"residues", reference_columns1,
true);
137 Columns foreign_key_columns2;
138 foreign_key_columns2.push_back(struct_id);
139 foreign_key_columns2.push_back(resNum2);
141 reference_columns2.push_back(
"struct_id");
142 reference_columns2.push_back(
"resNum");
143 ForeignKey foreign_key2(foreign_key_columns2,
"residues", reference_columns2,
true);
146 Schema table(
"HPOL_orbital", primary_key);
147 table.add_foreign_key(foreign_key1);
148 table.add_foreign_key(foreign_key2);
149 table.add_column(resName1);
150 table.add_column(orbNum1);
151 table.add_column(resName2);
152 table.add_column(hpolNum2);
153 table.add_column(htype2);
154 table.add_column(OrbHdist);
155 table.add_column(cosAOH);
156 table.add_column(cosDHO);
157 table.add_column(chiBAOH);
158 table.add_column(chiBDHO);
159 table.add_column(AOH_angle);
160 table.add_column(DHO_angle);
161 table.add_column(chiBAHD);
162 table.add_column(cosAHD);
164 table.write(db_session);
171 using namespace basic::database::schema_generator;
173 Column struct_id(
"struct_id",
new DbUUID());
174 Column resNum1(
"resNum1",
new DbInteger());
175 Column resName1(
"resName1",
new DbText());
176 Column orbNum1(
"orbNum1",
new DbInteger());
177 Column orbName1(
"orbName1",
new DbText());
178 Column resNum2(
"resNum2",
new DbInteger());
179 Column resName2(
"resName2",
new DbText());
180 Column haroNum2(
"haroNum2",
new DbInteger());
181 Column htype2(
"htype2",
new DbText());
182 Column OrbHdist(
"orbHdist",
new DbReal());
183 Column cosAOH(
"cosAOH",
new DbReal());
184 Column cosDHO(
"cosDHO",
new DbReal());
185 Column chiBAOH(
"chiBAOH",
new DbReal());
186 Column chiBDHO(
"chiBDHO",
new DbReal());
187 Column AOH_angle(
"AOH_angle",
new DbReal());
188 Column DHO_angle(
"DHO_angle",
new DbReal());
189 Column chiBAHD(
"chiBAHD",
new DbReal());
190 Column cosAHD(
"cosAHD",
new DbReal());
192 Columns primary_key_columns;
193 primary_key_columns.push_back(struct_id);
194 primary_key_columns.push_back(resNum1);
195 primary_key_columns.push_back(orbName1);
196 primary_key_columns.push_back(resNum2);
197 primary_key_columns.push_back(haroNum2);
198 PrimaryKey primary_key(primary_key_columns);
200 Columns foreign_key_columns1;
201 foreign_key_columns1.push_back(struct_id);
202 foreign_key_columns1.push_back(resNum1);
204 reference_columns1.push_back(
"struct_id");
205 reference_columns1.push_back(
"resNum");
206 ForeignKey foreign_key1(foreign_key_columns1,
"residues", reference_columns1,
true);
208 Columns foreign_key_columns2;
209 foreign_key_columns2.push_back(struct_id);
210 foreign_key_columns2.push_back(resNum2);
212 reference_columns2.push_back(
"struct_id");
213 reference_columns2.push_back(
"resNum");
214 ForeignKey foreign_key2(foreign_key_columns2,
"residues", reference_columns2,
true);
217 Schema table(
"HARO_orbital", primary_key);
218 table.add_foreign_key(foreign_key1);
219 table.add_foreign_key(foreign_key2);
220 table.add_column(resName1);
221 table.add_column(orbNum1);
222 table.add_column(resName2);
223 table.add_column(haroNum2);
224 table.add_column(htype2);
225 table.add_column(OrbHdist);
226 table.add_column(cosAOH);
227 table.add_column(cosDHO);
228 table.add_column(chiBAOH);
229 table.add_column(chiBDHO);
230 table.add_column(AOH_angle);
231 table.add_column(DHO_angle);
232 table.add_column(chiBAHD);
233 table.add_column(cosAHD);
235 table.write(db_session);
242 using namespace basic::database::schema_generator;
244 Column struct_id(
"struct_id",
new DbUUID());
245 Column resNum1(
"resNum1",
new DbInteger());
246 Column resName1(
"resName1",
new DbText());
247 Column orbNum1(
"orbNum1",
new DbInteger());
248 Column orbName1(
"orbName1",
new DbText());
249 Column resNum2(
"resNum2",
new DbInteger());
250 Column resName2(
"resName2",
new DbText());
251 Column orbNum2(
"orbNum2",
new DbInteger());
252 Column orbName2(
"orbName2",
new DbText());
253 Column orbOrbdist(
"orbOrbdist",
new DbReal());
254 Column cosAOO(
"cosAOO",
new DbReal());
255 Column cosDOO(
"cosDOO",
new DbReal());
256 Column chiBAOO(
"chiBAOO",
new DbReal());
257 Column chiBDOO(
"chiBDOO",
new DbReal());
258 Column AOO_angle(
"AOO_angle",
new DbReal());
259 Column DOO_angle(
"DOO_angle",
new DbReal());
260 Column DOA_angle(
"DOA_angle",
new DbReal());
261 Column AOD_angle(
"AOD_angle",
new DbReal());
262 Column chiBAHD(
"chiBAHD",
new DbReal());
263 Column cosAHD(
"cosAHD",
new DbReal());
265 Columns primary_key_columns;
266 primary_key_columns.push_back(struct_id);
267 primary_key_columns.push_back(resNum1);
268 primary_key_columns.push_back(orbName1);
269 primary_key_columns.push_back(resNum2);
270 primary_key_columns.push_back(orbNum2);
271 PrimaryKey primary_key(primary_key_columns);
273 Columns foreign_key_columns1;
274 foreign_key_columns1.push_back(struct_id);
275 foreign_key_columns1.push_back(resNum1);
277 reference_columns1.push_back(
"struct_id");
278 reference_columns1.push_back(
"resNum");
279 ForeignKey foreign_key1(foreign_key_columns1,
"residues", reference_columns1,
true);
281 Columns foreign_key_columns2;
282 foreign_key_columns2.push_back(struct_id);
283 foreign_key_columns2.push_back(resNum2);
285 reference_columns2.push_back(
"struct_id");
286 reference_columns2.push_back(
"resNum");
287 ForeignKey foreign_key2(foreign_key_columns2,
"residues", reference_columns2,
true);
290 Schema table(
"orbital_orbital", primary_key);
291 table.add_foreign_key(foreign_key1);
292 table.add_foreign_key(foreign_key2);
293 table.add_column(resName1);
294 table.add_column(orbNum1);
295 table.add_column(resName2);
296 table.add_column(orbName2);
297 table.add_column(orbOrbdist);
298 table.add_column(cosAOO);
299 table.add_column(cosDOO);
300 table.add_column(chiBAOO);
301 table.add_column(chiBDOO);
302 table.add_column(AOO_angle);
303 table.add_column(DOO_angle);
304 table.add_column(DOA_angle);
305 table.add_column(AOD_angle);
306 table.add_column(chiBAHD);
307 table.add_column(cosAHD);
309 table.write(db_session);
315 dependencies.push_back(
"ResidueFeatures");
324 boost::uuids::uuid
const struct_id,
338 boost::uuids::uuid
const struct_id,
341 std::string orbita_H_string =
"INSERT INTO HPOL_orbital (struct_id, resNum1, orbName1, resNum2, hpolNum2, resName1, orbNum1, resName2, htype2, OrbHdist, cosAOH, cosDHO, chiBAOH, chiBDHO, AOH_angle, DHO_angle, chiBAHD, cosAHD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
342 statement orbital_H_statement(basic::database::safely_prepare_statement(orbita_H_string,db_session));
343 std::string orbita_orbital_string =
"INSERT INTO orbital_orbital (struct_id, resNum1, orbName1, resNum2, orbNum2, resName1, orbNum1, resName2, orbName2, orbOrbdist, cosAOO, cosDOO, chiBAOO, chiBDOO, AOO_angle, DOO_angle, DOA_angle, AOD_angle, chiBAHD, cosAHD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
344 statement orbital_orbital_statement(basic::database::safely_prepare_statement(orbita_orbital_string,db_session));
345 std::string orbita_Haro_string =
"INSERT INTO HARO_orbital (struct_id, resNum1, orbName1, resNum2, haroNum2, resName1, orbNum1, resName2, htype2, orbHdist, cosAOH, cosDHO, chiBAOH, chiBDHO, AOH_angle, DHO_angle, chiBAHD, cosAHD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
346 statement orbital_Haro_statement(basic::database::safely_prepare_statement(orbita_Haro_string,db_session));
350 for(
Size resNum1 = 1; resNum1 <= pose.
n_residue(); ++resNum1){
355 string resName1=res1.
name3();
384 for(
Size res_num2 = 1; res_num2 <= pose.
n_residue(); ++res_num2){
386 if(resNum1 != res_num2){
396 Real const container(res1_Orbxyz.distance(res2_Orbxyz));
399 if(container <= OrbHdist){
401 orbName1, res2name, OrbName2, orbNum1, OrbNum2, cosAOO, cosDOO, chiBAOO, chiBDOO, AOO_angle,
402 DOO_angle, OrbHdist, DOA_angle, AOD_angle, chiBAHD, cosAHD);
417 Real const container(Orbxyz.distance(Hxyz));
418 if(container <= OrbHdist){
419 set_OrbH_features_data(res1, res2, Aindex, Hindex, Orbindex, Orbxyz, resNum2, orbName1, htype2, res2name,
420 orbNum1, haroNum2, cosAOH, cosDHO, chiBDHO, chiBAOH, AOH_angle, DHO_angle, chiBAHD,cosAHD, OrbHdist );
440 Real const container(Orbxyz.distance(Hxyz));
441 if(container <= OrbHdist){
442 set_OrbH_features_data(res1, res2, Aindex, Hindex, Orbindex, Orbxyz, resNum2, orbName1, htype2, res2name,
443 orbNum1, hpolNum2, cosAOH, cosDHO, chiBDHO, chiBAOH, AOH_angle, DHO_angle, chiBAHD,cosAHD, OrbHdist );
463 if(OrbHdist <=10.0 && orb_hpol ==
true){
464 orbital_H_statement.bind(1,struct_id);
465 orbital_H_statement.bind(2, resNum1);
466 orbital_H_statement.bind(3, orbName1);
467 orbital_H_statement.bind(4, resNum2);
468 orbital_H_statement.bind(5, hpolNum2);
469 orbital_H_statement.bind(6, resName1);
470 orbital_H_statement.bind(7,orbNum1 );
471 orbital_H_statement.bind(8, res2name);
472 orbital_H_statement.bind(9, htype2);
473 orbital_H_statement.bind(10, OrbHdist);
474 orbital_H_statement.bind(11, cosAOH);
475 orbital_H_statement.bind(12, cosDHO);
476 orbital_H_statement.bind(13, chiBAOH);
477 orbital_H_statement.bind(14, chiBDHO);
478 orbital_H_statement.bind(15, AOH_angle);
479 orbital_H_statement.bind(16, DHO_angle);
480 orbital_H_statement.bind(17, chiBAHD);
481 orbital_H_statement.bind(18, cosAHD);
482 basic::database::safely_write_to_database(orbital_H_statement);
484 if(OrbHdist <=10.0 && orb_orb==
true){
485 orbital_orbital_statement.bind(1,struct_id);
486 orbital_orbital_statement.bind(2, resNum1);
487 orbital_orbital_statement.bind(3, orbName1);
488 orbital_orbital_statement.bind(4, resNum2);
489 orbital_orbital_statement.bind(5, OrbNum2);
490 orbital_orbital_statement.bind(6, resName1);
491 orbital_orbital_statement.bind(7, orbNum1);
492 orbital_orbital_statement.bind(8, res2name);
493 orbital_orbital_statement.bind(9, OrbName2);
494 orbital_orbital_statement.bind(10, OrbHdist);
495 orbital_orbital_statement.bind(11, cosAOO);
496 orbital_orbital_statement.bind(12, cosDOO);
497 orbital_orbital_statement.bind(13, chiBAOO);
498 orbital_orbital_statement.bind(14, chiBDOO);
499 orbital_orbital_statement.bind(15, AOO_angle);
500 orbital_orbital_statement.bind(16, DOO_angle);
501 orbital_orbital_statement.bind(17, DOA_angle);
502 orbital_orbital_statement.bind(18, AOD_angle);
503 orbital_orbital_statement.bind(19, chiBAHD);
504 orbital_orbital_statement.bind(18, cosAHD);
507 basic::database::safely_write_to_database(orbital_orbital_statement);
509 if(OrbHdist <=10.0 && orb_haro ==
true){
510 orbital_Haro_statement.bind(1,struct_id);
511 orbital_Haro_statement.bind(2, resNum1);
512 orbital_Haro_statement.bind(3, orbName1);
513 orbital_Haro_statement.bind(4, resNum2);
514 orbital_Haro_statement.bind(5, hpolNum2);
515 orbital_Haro_statement.bind(6, resName1);
516 orbital_Haro_statement.bind(7, orbNum1);
517 orbital_Haro_statement.bind(8, res2name);
518 orbital_Haro_statement.bind(9, htype2);
519 orbital_Haro_statement.bind(10, OrbHdist);
520 orbital_Haro_statement.bind(11, cosAOH);
521 orbital_Haro_statement.bind(12, cosDHO);
522 orbital_Haro_statement.bind(13, chiBAOH);
523 orbital_Haro_statement.bind(14, chiBDHO);
524 orbital_Haro_statement.bind(15, AOH_angle);
525 orbital_Haro_statement.bind(16, DHO_angle);
526 orbital_Haro_statement.bind(17, chiBAHD);
527 orbital_Haro_statement.bind(18, cosAHD);
528 basic::database::safely_write_to_database(orbital_Haro_statement);
540 boost::uuids::uuid
const ,
641 Real const container(Orbxyz.distance(Hxyz));
645 AOH_angle = cos_of(Axyz, Orbxyz, Hxyz );
646 DHO_angle = cos_of(Dxyz, Hxyz, Orbxyz);
652 res2name= res2.
name3();
656 if(res2name ==
"PHE" || res2name ==
"TYR" || res2name ==
"TRP" || res2name ==
"HIS"){
661 if(res2name ==
"ARG"){
671 cosDHO = dot( BAunit, AHunit );
672 chiBDHO = numeric::dihedral_radians(Bxyz, Dxyz, Hxyz,Orbxyz);
677 if(res1name ==
"PHE" || res1name ==
"TYR" || res1name ==
"TRP" || res1name ==
"HIS"){
685 if(res1name ==
"ARG"){
688 AHunit = Hxyz - Orbxyz;
691 BAunit = Orbxyz - Axyz;
694 cosAOH = dot( BAunit, AHunit );
695 chiBAOH = numeric::dihedral_radians(Bxyz,Axyz , Orbxyz,Hxyz);
697 AHunit = Dxyz - Hxyz;
699 BAunit = Hxyz - Axyz;
702 cosAHD = dot(BAunit, AHunit);
703 chiBAHD = numeric::dihedral_radians(Bxyz, Axyz, Hxyz, Dxyz);
735 Real const container(Orbxyz1.distance(Orbxyz2));
738 AOO_angle = cos_of(Axyz, Orbxyz1, Orbxyz2 );
739 DOO_angle = cos_of(Dxyz, Orbxyz2, Orbxyz1);
744 AOD_angle = cos_of(Axyz, Orbxyz1, Dxyz);
745 DOA_angle = cos_of(Dxyz, Orbxyz2, Axyz);
749 res2name= res2.
name3();
761 cosDOO = dot( BAunit, AHunit );
762 chiBDOO = numeric::dihedral_radians(Bxyz, Dxyz, Orbxyz2,Orbxyz1);
767 if(res1name ==
"PHE" || res1name ==
"TYR" || res1name ==
"TRP" || res1name ==
"HIS"){
772 AHunit = Orbxyz2 - Orbxyz1;
775 BAunit = Orbxyz1 - Axyz;
778 cosAOO = dot( BAunit, AHunit );
779 chiBAOO = numeric::dihedral_radians(Bxyz,Axyz, Orbxyz1,Orbxyz2);