22 #include <boost/uuid/uuid.hpp>
29 #include <basic/database/sql_utils.hh>
30 #include <utility/sql_database/DatabaseSessionManager.hh>
31 #include <numeric/xyz.functions.hh>
39 #include <cppdb/frontend.h>
42 #include <basic/Tracer.hh>
43 #include <basic/options/util.hh>
44 #include <basic/options/keys/strand_assembly.OptionKeys.gen.hh>
45 #include <basic/database/schema_generator/PrimaryKey.hh>
46 #include <basic/database/schema_generator/ForeignKey.hh>
47 #include <basic/database/schema_generator/Column.hh>
48 #include <basic/database/schema_generator/Schema.hh>
49 #include <basic/database/schema_generator/Constraint.hh>
54 static basic::Tracer
TR(
"protocols.features.strand_assembly.StrandBundleFeatures");
58 namespace strand_assembly {
64 using utility::sql_database::sessionOP;
65 using cppdb::statement;
75 min_sheet_torsion_(-40.0),
76 max_sheet_torsion_(-20.0)
82 using namespace basic::options;
84 if(option[OptionKeys::strand_assembly::min_strand_size].user()){
87 if(option[OptionKeys::strand_assembly::max_strand_size].user()){
90 if(option[OptionKeys::strand_assembly::min_O_N_dis].user()){
91 min_O_N_dis_ = option[OptionKeys::strand_assembly::min_O_N_dis];
93 if(option[OptionKeys::strand_assembly::max_O_N_dis].user()){
94 max_O_N_dis_ = option[OptionKeys::strand_assembly::max_O_N_dis];
96 if(option[OptionKeys::strand_assembly::min_sheet_dis].user()){
97 min_sheet_dis_ = option[OptionKeys::strand_assembly::min_sheet_dis];
99 if(option[OptionKeys::strand_assembly::max_sheet_dis].user()){
100 max_sheet_dis_ = option[OptionKeys::strand_assembly::max_sheet_dis];
102 if(option[OptionKeys::strand_assembly::min_sheet_torsion].user()){
105 if(option[OptionKeys::strand_assembly::max_sheet_torsion].user()){
113 dependencies.push_back(
"ResidueFeatures");
114 dependencies.push_back(
"ProteinResidueConformationFeatures");
115 dependencies.push_back(
"ResidueSecondaryStructureFeatures");
121 using namespace basic::database::schema_generator;
127 Column pairs_id (
"pairs_id",
new DbInteger(),
false ,
true );
130 Column bool_parallel (
"bool_parallel",
new DbInteger(),
false ,
false );
133 Column struct_id (
"struct_id",
new DbUUID(),
false ,
false );
136 Column i_strand_residue_start(
"i_strand_residue_start",
new DbInteger(),
false ,
false );
137 Column i_strand_residue_end (
"i_strand_residue_end",
new DbInteger(),
false ,
false );
138 Column j_strand_residue_start(
"j_strand_residue_start",
new DbInteger(),
false ,
false );
139 Column j_strand_residue_end (
"j_strand_residue_end",
new DbInteger(),
false ,
false );
143 Schema strand_pairs(
"strand_pairs", PrimaryKey(pairs_id));
148 strand_pairs.add_foreign_key(ForeignKey(struct_id,
"structures",
"struct_id",
true ));
153 fkey_reference_cols.push_back(
"struct_id");
154 fkey_reference_cols.push_back(
"resNum");
158 i_start_fkey_cols.push_back(struct_id);
159 i_start_fkey_cols.push_back(i_strand_residue_start);
161 strand_pairs.add_foreign_key(ForeignKey(i_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
166 i_end_fkey_cols.push_back(struct_id);
167 i_end_fkey_cols.push_back(i_strand_residue_end);
169 strand_pairs.add_foreign_key(ForeignKey(i_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
173 j_start_fkey_cols.push_back(struct_id);
174 j_start_fkey_cols.push_back(j_strand_residue_start);
176 strand_pairs.add_foreign_key(ForeignKey(j_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
180 j_end_fkey_cols.push_back(struct_id);
181 j_end_fkey_cols.push_back(j_strand_residue_end);
183 strand_pairs.add_foreign_key(ForeignKey(j_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
185 strand_pairs.write(db_session);
191 Column sheet_pairs_id (
"sheet_pairs_id",
new DbInteger(),
false ,
true );
197 Column g1_strand_1_res_start (
"g1_strand_1_res_start",
new DbInteger(),
false ,
false );
198 Column g1_strand_1_res_end (
"g1_strand_1_res_end",
new DbInteger(),
false ,
false );
200 Column g1_strand_2_res_start (
"g1_strand_2_res_start",
new DbInteger(),
false ,
false );
201 Column g1_strand_2_res_end (
"g1_strand_2_res_end",
new DbInteger(),
false ,
false );
204 Column g2_strand_1_res_start (
"g2_strand_1_res_start",
new DbInteger(),
false ,
false );
205 Column g2_strand_1_res_end (
"g2_strand_1_res_end",
new DbInteger(),
false ,
false );
206 Column g2_strand_2_res_start (
"g2_strand_2_res_start",
new DbInteger(),
false ,
false );
207 Column g2_strand_2_res_end (
"g2_strand_2_res_end",
new DbInteger(),
false ,
false );
209 Column shortest_sc_dis (
"shortest_sc_dis",
new DbDouble(),
false ,
false );
213 Schema sheet_pairs(
"sheet_pairs", PrimaryKey(sheet_pairs_id));
216 sheet_pairs.add_foreign_key(ForeignKey(struct_id,
"structures",
"struct_id",
true ));
220 g1_s1_start_fkey_cols.push_back(struct_id);
221 g1_s1_start_fkey_cols.push_back(g1_strand_1_res_start);
223 sheet_pairs.add_foreign_key(ForeignKey(g1_s1_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
227 g1_s1_end_fkey_cols.push_back(struct_id);
228 g1_s1_end_fkey_cols.push_back(g1_strand_1_res_end);
230 sheet_pairs.add_foreign_key(ForeignKey(g1_s1_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
235 g1_s2_start_fkey_cols.push_back(struct_id);
236 g1_s2_start_fkey_cols.push_back(g1_strand_2_res_start);
238 sheet_pairs.add_foreign_key(ForeignKey(g1_s2_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
242 g1_s2_end_fkey_cols.push_back(struct_id);
243 g1_s2_end_fkey_cols.push_back(g1_strand_2_res_end);
245 sheet_pairs.add_foreign_key(ForeignKey(g1_s2_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
249 g2_s1_start_fkey_cols.push_back(struct_id);
250 g2_s1_start_fkey_cols.push_back(g2_strand_1_res_start);
252 sheet_pairs.add_foreign_key(ForeignKey(g2_s1_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
256 g2_s1_end_fkey_cols.push_back(struct_id);
257 g2_s1_end_fkey_cols.push_back(g2_strand_1_res_end);
259 sheet_pairs.add_foreign_key(ForeignKey(g2_s1_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
263 g2_s2_start_fkey_cols.push_back(struct_id);
264 g2_s2_start_fkey_cols.push_back(g2_strand_2_res_start);
266 sheet_pairs.add_foreign_key(ForeignKey(g2_s2_start_fkey_cols,
"residues", fkey_reference_cols,
true ));
270 g2_s2_end_fkey_cols.push_back(struct_id);
271 g2_s2_end_fkey_cols.push_back(g2_strand_2_res_end);
273 sheet_pairs.add_foreign_key(ForeignKey(g2_s2_end_fkey_cols,
"residues", fkey_reference_cols,
true ));
275 sheet_pairs.add_column(shortest_sc_dis);
277 sheet_pairs.write(db_session);
285 " strands.beta_id,\n"
286 " strands.residue_begin,\n"
287 " strands.residue_end\n"
289 " beta_segments as strands\n"
291 " strands.struct_id = ?;";
293 statement select_statement(basic::database::safely_prepare_statement(select_string,db_session));
294 select_statement.bind(1,struct_id);
295 result res(basic::database::safely_read_from_database(select_statement));
299 Size strand_id, residue_begin, residue_end;
300 res >> strand_id >> residue_begin >> residue_end;
301 all_strands.push_back(
StrandFragment(residue_begin, residue_end));
311 " strand_pairs_table.pairs_id,\n"
312 " strand_pairs_table.i_strand_residue_start,\n"
313 " strand_pairs_table.i_strand_residue_end\n"
315 " strand_pairs as strand_pairs_table\n"
317 " strand_pairs_table.struct_id = ?;";
319 statement select_statement(basic::database::safely_prepare_statement(select_string,db_session));
320 select_statement.bind(1,struct_id);
321 result res(basic::database::safely_read_from_database(select_statement));
325 Size strand_pairs_id, i_strand_residue_start, i_strand_residue_end;
326 res >> strand_pairs_id >> i_strand_residue_start >> i_strand_residue_end;
327 i_strand.push_back(
StrandFragment(i_strand_residue_start, i_strand_residue_end));
336 " strand_pairs_table.pairs_id,\n"
337 " strand_pairs_table.j_strand_residue_start,\n"
338 " strand_pairs_table.j_strand_residue_end\n"
340 " strand_pairs as strand_pairs_table\n"
342 " strand_pairs_table.struct_id = ?;";
344 statement select_statement(basic::database::safely_prepare_statement(select_string,db_session));
345 select_statement.bind(1,struct_id);
346 result res(basic::database::safely_read_from_database(select_statement));
350 Size strand_pairs_id, j_strand_residue_start, j_strand_residue_end;
351 res >> strand_pairs_id >> j_strand_residue_start >> j_strand_residue_end;
352 j_strand.push_back(
StrandFragment(j_strand_residue_start, j_strand_residue_end));
372 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
375 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
409 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
412 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
459 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
462 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
481 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
484 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
498 Size current_i_resnum = i_resnum+1;
499 Size current_j_resnum = j_resnum-1;
500 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
507 Size current_i_resnum = i_resnum+2;
508 Size current_j_resnum = j_resnum-2;
509 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
516 Size current_i_resnum = i_resnum+3;
517 Size current_j_resnum = j_resnum-3;
518 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
525 Real avg_dis_CA_CA = (dis_CA_CA_1 + dis_CA_CA_2 + dis_CA_CA_3 + dis_CA_CA_4)/4;
526 return avg_dis_CA_CA;
531 TR.Info <<
"maybe no residue here" << endl;
538 TR.Info <<
"maybe no residue here" << endl;
545 TR.Info <<
"maybe no residue here" << endl;
576 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
579 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
596 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
599 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
614 Size current_i_resnum = i_resnum+1;
615 Size current_j_resnum = j_resnum+1;
616 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
623 Size current_i_resnum = i_resnum+2;
624 Size current_j_resnum = j_resnum+2;
625 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
632 Size current_i_resnum = i_resnum+3;
633 Size current_j_resnum = j_resnum+3;
634 if (current_i_resnum > 0 && current_i_resnum <= pose.
total_residue() && current_j_resnum > 0 && current_j_resnum <= pose.
total_residue())
642 Real avg_dis_CA_CA = (dis_CA_CA_1 + dis_CA_CA_2 + dis_CA_CA_3 + dis_CA_CA_4)/4;
643 return avg_dis_CA_CA;
648 TR.Info <<
"maybe no residue here" << endl;
655 TR.Info <<
"maybe no residue here" << endl;
662 TR.Info <<
"maybe no residue here" << endl;
695 if (dis_i_end_and_j_start < dis_i_end_and_j_end)
708 Real torsion_i_j = numeric::dihedral_degrees(first_xyz, second_xyz, third_xyz, fourth_xyz);
725 Real torsion_i_j = numeric::dihedral_degrees(first_xyz, second_xyz, third_xyz, fourth_xyz);
740 Real temp_shortest_dis = 9999;
751 for(
Size strand_i_res=0; strand_i_res < strand_i.
get_size(); strand_i_res++)
755 for(
Size strand_j_res=0; strand_j_res < strand_j.
get_size(); strand_j_res++)
789 if (temp_shortest_dis > dis_sc_sc)
791 temp_shortest_dis = dis_sc_sc;
818 return temp_shortest_dis;
825 Real val_shortest_dis_sidechain_1,
826 Real val_shortest_dis_sidechain_2,
827 Real val_shortest_dis_sidechain_3,
828 Real val_shortest_dis_sidechain_4
831 Real temp_shortest_dis = val_shortest_dis_sidechain_1;
833 if (temp_shortest_dis > val_shortest_dis_sidechain_2)
836 temp_shortest_dis = val_shortest_dis_sidechain_2;
837 if (temp_shortest_dis > val_shortest_dis_sidechain_3)
839 temp_shortest_dis = val_shortest_dis_sidechain_3;
840 if (temp_shortest_dis > val_shortest_dis_sidechain_4)
842 temp_shortest_dis = val_shortest_dis_sidechain_4;
848 if (temp_shortest_dis > val_shortest_dis_sidechain_4)
850 temp_shortest_dis = val_shortest_dis_sidechain_4;
859 if (temp_shortest_dis > val_shortest_dis_sidechain_3)
861 temp_shortest_dis = val_shortest_dis_sidechain_3;
862 if (temp_shortest_dis > val_shortest_dis_sidechain_4)
864 temp_shortest_dis = val_shortest_dis_sidechain_4;
869 if (temp_shortest_dis > val_shortest_dis_sidechain_4)
871 temp_shortest_dis = val_shortest_dis_sidechain_4;
876 return temp_shortest_dis;
884 Real return_of_check_sheet_dis_antiparallel_1,
885 Real return_of_check_sheet_dis_antiparallel_2,
886 Real return_of_check_sheet_dis_antiparallel_3,
887 Real return_of_check_sheet_dis_antiparallel_4
890 Real temp_shortest_dis = return_of_check_sheet_dis_antiparallel_1;
892 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_2)
895 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_2;
896 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_3)
898 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_3;
899 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_4)
901 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_4;
907 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_4)
909 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_4;
918 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_3)
920 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_3;
921 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_4)
923 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_4;
928 if (temp_shortest_dis > return_of_check_sheet_dis_antiparallel_4)
930 temp_shortest_dis = return_of_check_sheet_dis_antiparallel_4;
935 return temp_shortest_dis;
945 boost::uuids::uuid struct_id,
946 utility::sql_database::sessionOP db_session)
948 TR.Info <<
"======================= <report_features begin> =========================" << endl;
959 for(
Size i=1; i<all_strands.size(); ++i)
967 for(
Size j=i+1; j<=all_strands.size(); ++j)
975 StrandFragment temp_strand_i(all_strands[i].get_start(), all_strands[i].get_end());
976 StrandFragment temp_strand_j(all_strands[j].get_start(), all_strands[j].get_end());
979 bool return_of_find_antiparallel =
find_antiparallel (pose, temp_strand_i, temp_strand_j);
980 if (return_of_find_antiparallel)
985 string pair_insert =
"INSERT INTO strand_pairs (struct_id, i_strand_residue_start, i_strand_residue_end, j_strand_residue_start, j_strand_residue_end) VALUES (?,?,?,?,?);";
986 statement pair_insert_stmt(basic::database::safely_prepare_statement(pair_insert,db_session));
987 pair_insert_stmt.bind(1,struct_id);
988 pair_insert_stmt.bind(2,all_strands[i].get_start());
989 pair_insert_stmt.bind(3,all_strands[i].get_end());
990 pair_insert_stmt.bind(4,all_strands[j].get_start());
991 pair_insert_stmt.bind(5,all_strands[j].get_end());
992 basic::database::safely_write_to_database(pair_insert_stmt);
997 bool return_of_find_parallel =
find_parallel (pose, temp_strand_i, temp_strand_j);
998 if (return_of_find_parallel)
1003 string pair_insert =
"INSERT INTO strand_pairs (struct_id, i_strand_residue_start, i_strand_residue_end, j_strand_residue_start, j_strand_residue_end) VALUES (?,?,?,?,?);";
1004 statement pair_insert_stmt(basic::database::safely_prepare_statement(pair_insert,db_session));
1005 pair_insert_stmt.bind(1,struct_id);
1006 pair_insert_stmt.bind(2,all_strands[i].get_start());
1007 pair_insert_stmt.bind(3,all_strands[i].get_end());
1008 pair_insert_stmt.bind(4,all_strands[j].get_start());
1009 pair_insert_stmt.bind(5,all_strands[j].get_end());
1010 basic::database::safely_write_to_database(pair_insert_stmt);
1049 TR <<
"============== (Done) saving pairs of strands ==========" << endl;
1056 for(
Size ii=1; ii<i_strand_from_full_strand_pairs.size(); ++ii)
1065 for(
Size jj=ii+1; jj<=i_strand_from_full_strand_pairs.size(); ++jj)
1076 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1077 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1079 if (return_of_check_sheet_dis_antiparallel_1 != -99)
1081 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1082 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1084 if (return_of_check_sheet_dis_antiparallel_2 != -99)
1086 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1087 StrandFragment temp_strand_j(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1089 if (return_of_check_sheet_dis_antiparallel_3 != -99)
1091 StrandFragment temp_strand_i(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1092 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1094 if (return_of_check_sheet_dis_antiparallel_4 != -99)
1101 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1102 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1105 StrandFragment temp_strand_k(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1106 StrandFragment temp_strand_l(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1109 StrandFragment temp_strand_m(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1110 StrandFragment temp_strand_n(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1113 StrandFragment temp_strand_o(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1114 StrandFragment temp_strand_p(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1117 if (sheet_torsion_1 < 0 && sheet_torsion_2 < 0 && sheet_torsion_3 < 0 && sheet_torsion_4 < 0)
1120 Real sheet_torsion_avg = (sheet_torsion_1 + sheet_torsion_2 + sheet_torsion_3 + sheet_torsion_4)/4;
1126 TR.Info <<
"<sheet by torsion found (by anti-parallel way)> the average torsion between " << ii <<
" th strand_pair (i) and " << jj <<
" th strand_pair (j) is within " <<
min_sheet_torsion_ <<
" and " <<
max_sheet_torsion_ << endl;
1128 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1129 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1135 StrandFragment temp_strand_k(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1136 StrandFragment temp_strand_l(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1142 StrandFragment temp_strand_m(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1143 StrandFragment temp_strand_n(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1149 StrandFragment temp_strand_o(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1150 StrandFragment temp_strand_p(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1157 Real val_shortest_dis_sidechain =
shortest_dis_sidechain(val_shortest_dis_sidechain_1, val_shortest_dis_sidechain_2, val_shortest_dis_sidechain_3, val_shortest_dis_sidechain_4);
1176 Real val_shortest_dis_pairs =
shortest_dis_pairs(return_of_check_sheet_dis_antiparallel_1, return_of_check_sheet_dis_antiparallel_2, return_of_check_sheet_dis_antiparallel_3, return_of_check_sheet_dis_antiparallel_4);
1180 string pair_insert =
1181 "INSERT INTO sheet_pairs (struct_id, g1_strand_1_res_start, g1_strand_1_res_end, g1_strand_2_res_start, g1_strand_2_res_end, g2_strand_1_res_start, g2_strand_1_res_end, g2_strand_2_res_start, g2_strand_2_res_end, shortest_sc_dis) VALUES (?, ?,?,?,?, ?,?,?,?, ?);";
1182 statement pair_insert_stmt(basic::database::safely_prepare_statement(pair_insert, db_session));
1183 pair_insert_stmt.bind(1, struct_id);
1187 if (val_shortest_dis_pairs == return_of_check_sheet_dis_antiparallel_1)
1190 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[ii].get_start());
1191 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[ii].get_end());
1192 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[jj].get_start());
1193 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[jj].get_end());
1197 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[jj].get_start());
1198 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[jj].get_end());
1199 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[ii].get_start());
1200 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[ii].get_end());
1205 else if (val_shortest_dis_pairs == return_of_check_sheet_dis_antiparallel_2)
1208 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[jj].get_start());
1209 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[jj].get_end());
1210 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[ii].get_start());
1211 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[ii].get_end());
1215 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[ii].get_start());
1216 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[ii].get_end());
1217 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[jj].get_start());
1218 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[jj].get_end());
1222 else if (val_shortest_dis_pairs == return_of_check_sheet_dis_antiparallel_3)
1225 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[ii].get_start());
1226 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[ii].get_end());
1227 pair_insert_stmt.bind(4, i_strand_from_full_strand_pairs[jj].get_start());
1228 pair_insert_stmt.bind(5, i_strand_from_full_strand_pairs[jj].get_end());
1232 pair_insert_stmt.bind(6, j_strand_from_full_strand_pairs[ii].get_start());
1233 pair_insert_stmt.bind(7, j_strand_from_full_strand_pairs[ii].get_end());
1234 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[jj].get_start());
1235 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[jj].get_end());
1242 pair_insert_stmt.bind(2, j_strand_from_full_strand_pairs[jj].get_start());
1243 pair_insert_stmt.bind(3, j_strand_from_full_strand_pairs[jj].get_end());
1244 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[ii].get_start());
1245 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[ii].get_end());
1249 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[ii].get_start());
1250 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[ii].get_end());
1251 pair_insert_stmt.bind(8, i_strand_from_full_strand_pairs[jj].get_start());
1252 pair_insert_stmt.bind(9, i_strand_from_full_strand_pairs[jj].get_end());
1257 pair_insert_stmt.bind(10, val_shortest_dis_sidechain);
1258 basic::database::safely_write_to_database(pair_insert_stmt);
1283 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1284 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1286 if (return_of_check_sheet_dis_parallel_1 != -99)
1288 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1289 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1291 if (return_of_check_sheet_dis_parallel_2 != -99)
1293 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1294 StrandFragment temp_strand_j(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1296 if (return_of_check_sheet_dis_parallel_3 != -99)
1298 StrandFragment temp_strand_i(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1299 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1301 if (return_of_check_sheet_dis_parallel_4 != -99)
1307 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1308 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1311 StrandFragment temp_strand_k(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1312 StrandFragment temp_strand_l(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1315 StrandFragment temp_strand_m(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1316 StrandFragment temp_strand_n(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1319 StrandFragment temp_strand_o(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1320 StrandFragment temp_strand_p(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1323 if (sheet_torsion_1 < 0 && sheet_torsion_2 < 0 && sheet_torsion_3 < 0 && sheet_torsion_4 < 0)
1327 Real sheet_torsion_avg = (sheet_torsion_1 + sheet_torsion_2 + sheet_torsion_3 + sheet_torsion_4)/4;
1334 StrandFragment temp_strand_i(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1335 StrandFragment temp_strand_j(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1341 StrandFragment temp_strand_k(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1342 StrandFragment temp_strand_l(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1348 StrandFragment temp_strand_m(i_strand_from_full_strand_pairs[ii].get_start(), i_strand_from_full_strand_pairs[ii].get_end());
1349 StrandFragment temp_strand_n(i_strand_from_full_strand_pairs[jj].get_start(), i_strand_from_full_strand_pairs[jj].get_end());
1355 StrandFragment temp_strand_o(j_strand_from_full_strand_pairs[jj].get_start(), j_strand_from_full_strand_pairs[jj].get_end());
1356 StrandFragment temp_strand_p(j_strand_from_full_strand_pairs[ii].get_start(), j_strand_from_full_strand_pairs[ii].get_end());
1362 Real val_shortest_dis_sidechain =
shortest_dis_sidechain(val_shortest_dis_sidechain_1, val_shortest_dis_sidechain_2, val_shortest_dis_sidechain_3, val_shortest_dis_sidechain_4);
1367 Real val_shortest_dis_pairs =
shortest_dis_pairs(return_of_check_sheet_dis_parallel_1, return_of_check_sheet_dis_parallel_2, return_of_check_sheet_dis_parallel_3, return_of_check_sheet_dis_parallel_4);
1371 TR.Info <<
"=========== saving (parallel) sheet pairs =========== " << endl;
1372 string pair_insert =
1373 "INSERT INTO sheet_pairs (struct_id, g1_strand_1_res_start, g1_strand_1_res_end, g1_strand_2_res_start, g1_strand_2_res_end, g2_strand_1_res_start, g2_strand_1_res_end, g2_strand_2_res_start, g2_strand_2_res_end, shortest_sc_dis) VALUES (?, ?,?,?,?, ?,?,?,?, ?);";
1374 statement pair_insert_stmt(basic::database::safely_prepare_statement(pair_insert, db_session));
1375 pair_insert_stmt.bind(1, struct_id);
1379 if (val_shortest_dis_pairs == return_of_check_sheet_dis_parallel_1)
1382 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[ii].get_start());
1383 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[ii].get_end());
1384 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[jj].get_start());
1385 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[jj].get_end());
1389 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[jj].get_start());
1390 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[jj].get_end());
1391 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[ii].get_start());
1392 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[ii].get_end());
1397 else if (val_shortest_dis_pairs == return_of_check_sheet_dis_parallel_2)
1400 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[jj].get_start());
1401 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[jj].get_end());
1402 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[ii].get_start());
1403 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[ii].get_end());
1407 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[ii].get_start());
1408 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[ii].get_end());
1409 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[jj].get_start());
1410 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[jj].get_end());
1414 else if (val_shortest_dis_pairs == return_of_check_sheet_dis_parallel_3)
1417 pair_insert_stmt.bind(2, i_strand_from_full_strand_pairs[ii].get_start());
1418 pair_insert_stmt.bind(3, i_strand_from_full_strand_pairs[ii].get_end());
1419 pair_insert_stmt.bind(4, i_strand_from_full_strand_pairs[jj].get_start());
1420 pair_insert_stmt.bind(5, i_strand_from_full_strand_pairs[jj].get_end());
1424 pair_insert_stmt.bind(6, j_strand_from_full_strand_pairs[ii].get_start());
1425 pair_insert_stmt.bind(7, j_strand_from_full_strand_pairs[ii].get_end());
1426 pair_insert_stmt.bind(8, j_strand_from_full_strand_pairs[jj].get_start());
1427 pair_insert_stmt.bind(9, j_strand_from_full_strand_pairs[jj].get_end());
1434 pair_insert_stmt.bind(2, j_strand_from_full_strand_pairs[jj].get_start());
1435 pair_insert_stmt.bind(3, j_strand_from_full_strand_pairs[jj].get_end());
1436 pair_insert_stmt.bind(4, j_strand_from_full_strand_pairs[ii].get_start());
1437 pair_insert_stmt.bind(5, j_strand_from_full_strand_pairs[ii].get_end());
1441 pair_insert_stmt.bind(6, i_strand_from_full_strand_pairs[ii].get_start());
1442 pair_insert_stmt.bind(7, i_strand_from_full_strand_pairs[ii].get_end());
1443 pair_insert_stmt.bind(8, i_strand_from_full_strand_pairs[jj].get_start());
1444 pair_insert_stmt.bind(9, i_strand_from_full_strand_pairs[jj].get_end());
1448 pair_insert_stmt.bind(10, val_shortest_dis_sidechain);
1449 basic::database::safely_write_to_database(pair_insert_stmt);
1468 TR <<
"============== (Done) saving \"ideal\" pairs of sheets ==========" << endl;