Skip to content
Snippets Groups Projects
Commit 5446104b authored by Studer Gabriel's avatar Studer Gabriel
Browse files

cosmetics

parent 05aae294
No related branches found
No related tags found
No related merge requests found
...@@ -72,15 +72,16 @@ String GetJson(const T& data, uint num_rows, uint num_cols) { ...@@ -72,15 +72,16 @@ String GetJson(const T& data, uint num_rows, uint num_cols) {
} }
void FilllDDTValues(int len, const std::vector<Real>& dist_diff, void FilllDDTValues(const std::vector<Real>& dist_diff,
const std::vector<int>& below_15, const std::vector<int>& ref_distances,
const std::vector<std::pair<int, int> >& idx_mapping, const std::vector<std::pair<int, int> >& idx_mapping,
std::vector<Real>& local_lddt) { std::vector<Real>& local_lddt) {
int len = dist_diff.size();
std::vector<int> counts(len, 0); std::vector<int> counts(len, 0);
std::vector<int> total_counts(len, 0); std::vector<int> total_counts(len, 0);
for(auto it = below_15.begin(); it != below_15.end(); ++it) { for(auto it = ref_distances.begin(); it != ref_distances.end(); ++it) {
Real diff = dist_diff[*it]; Real diff = dist_diff[*it];
int fulfilled = 0; int fulfilled = 0;
fulfilled += static_cast<int>(diff < static_cast<Real>(4.0)); fulfilled += static_cast<int>(diff < static_cast<Real>(4.0));
...@@ -106,7 +107,7 @@ void FilllDDTValues(int len, const std::vector<Real>& dist_diff, ...@@ -106,7 +107,7 @@ void FilllDDTValues(int len, const std::vector<Real>& dist_diff,
} }
void FilllDDTValues(int len, const std::vector<Real>& dist_one, void FilllDDTValues(const std::vector<Real>& dist_one,
const std::vector<Real>& dist_two, const std::vector<Real>& dist_two,
const std::vector<int>& below_15_one, const std::vector<int>& below_15_one,
const std::vector<int>& below_15_two, const std::vector<int>& below_15_two,
...@@ -114,13 +115,16 @@ void FilllDDTValues(int len, const std::vector<Real>& dist_one, ...@@ -114,13 +115,16 @@ void FilllDDTValues(int len, const std::vector<Real>& dist_one,
std::vector<Real>& local_lddt_one, std::vector<Real>& local_lddt_one,
std::vector<Real>& local_lddt_two) { std::vector<Real>& local_lddt_two) {
// absolute dist differences are the same for both
std::vector<Real> dist_diff(dist_one.size()); std::vector<Real> dist_diff(dist_one.size());
for(uint i = 0; i < dist_one.size(); ++i) { for(uint i = 0; i < dist_one.size(); ++i) {
dist_diff[i] = std::abs(dist_one[i] - dist_two[i]); dist_diff[i] = std::abs(dist_one[i] - dist_two[i]);
} }
FilllDDTValues(len, dist_diff, below_15_two, idx_mapping, local_lddt_one); // estimate lDDT of structure 1 with reference distances (below 15) from
FilllDDTValues(len, dist_diff, below_15_one, idx_mapping, local_lddt_two); // structure 2 and vice versa
FilllDDTValues(dist_diff, below_15_two, idx_mapping, local_lddt_one);
FilllDDTValues(dist_diff, below_15_one, idx_mapping, local_lddt_two);
} }
} // anon ns } // anon ns
...@@ -289,17 +293,20 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) { ...@@ -289,17 +293,20 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) {
throw IntegrityError("empty distance map provided"); throw IntegrityError("empty distance map provided");
} }
// the relevant pairwise distances are the ones that are off-diagonal from the // the relevant pairwise distances are the off-diagonal elements from the
// pairwise distance matrices // pairwise distance matrices -> the upper half without the diagonal elements
uint n_off_diagonal = (len*len-len)/2; uint n_off_diagonal = (len*len-len)/2;
// store that information in a linear layout for each structure
std::vector<std::vector<Real> > dist_data(dmap->GetNumStructures()); std::vector<std::vector<Real> > dist_data(dmap->GetNumStructures());
// keep track of distances <= 15 for lDDT calculation. Indices stored in here
// relate to the linear representations in dist_data
std::vector<std::vector<int> > below_15(dmap->GetNumStructures()); std::vector<std::vector<int> > below_15(dmap->GetNumStructures());
for(uint s_idx = 0; s_idx < nstruc; ++s_idx) { for(uint s_idx = 0; s_idx < nstruc; ++s_idx) {
// the default value is simply a very large number // the default value is simply a very large number this will trigger a
// this will trigger a distance difference above any relevant threshold // distance difference above any relevant threshold if not set
dist_data[s_idx].assign(n_off_diagonal, 10000000.0); dist_data[s_idx].assign(n_off_diagonal, 10000000.0);
} }
// keep track of which two residues are involved for each element in dist_data
std::vector<std::pair<int,int> > off_diagonal_mapper(n_off_diagonal); std::vector<std::pair<int,int> > off_diagonal_mapper(n_off_diagonal);
uint off_diag_idx = 0; uint off_diag_idx = 0;
...@@ -307,9 +314,8 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) { ...@@ -307,9 +314,8 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) {
for (uint j_res = i_res + 1; j_res < len; ++j_res, ++off_diag_idx) { for (uint j_res = i_res + 1; j_res < len; ++j_res, ++off_diag_idx) {
off_diagonal_mapper[off_diag_idx] = std::make_pair(i_res, j_res); off_diagonal_mapper[off_diag_idx] = std::make_pair(i_res, j_res);
const Distances& di = dmap->GetDistances(i_res, j_res); const Distances& di = dmap->GetDistances(i_res, j_res);
const uint size = di.GetDataSize(); for (uint k = 0; k < di.GetDataSize(); ++k) {
for (uint k = 0; k < size; ++k) { const std::pair<Real, int>& ret = di.GetDataElement(k);
const std::pair<Real, int> ret = di.GetDataElement(k);
dist_data[ret.second-1][off_diag_idx] = ret.first; dist_data[ret.second-1][off_diag_idx] = ret.first;
if(ret.first <= 15.0) { if(ret.first <= 15.0) {
below_15[ret.second-1].push_back(off_diag_idx); below_15[ret.second-1].push_back(off_diag_idx);
...@@ -318,27 +324,26 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) { ...@@ -318,27 +324,26 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) {
} }
} }
std::vector<std::vector<Real> > avg_lddt_values(nstruc); std::vector<std::vector<Real> > values(nstruc);
std::vector<std::vector<int> > avg_lddt_counts(nstruc); std::vector<std::vector<int> > counts(nstruc);
for(uint i = 0; i < nstruc; ++i) { for(uint i = 0; i < nstruc; ++i) {
avg_lddt_values[i].assign(len, 0); values[i].assign(len, 0);
avg_lddt_counts[i].assign(len, 0); counts[i].assign(len, 0);
} }
std::vector<Real> lddt_i, lddt_j; std::vector<Real> lddt_i, lddt_j;
for(uint i = 0; i < nstruc; ++i) { for(uint i = 0; i < nstruc; ++i) {
for(uint j = i+1; j < nstruc; ++j) { for(uint j = i+1; j < nstruc; ++j) {
FilllDDTValues(len, dist_data[i], dist_data[j], below_15[i], below_15[j], FilllDDTValues(dist_data[i], dist_data[j], below_15[i], below_15[j],
off_diagonal_mapper, lddt_i, lddt_j); off_diagonal_mapper, lddt_i, lddt_j);
for(uint k = 0; k < len; ++k) { for(uint k = 0; k < len; ++k) {
if(!std::isnan(lddt_i[k])) { if(!std::isnan(lddt_i[k])) {
avg_lddt_values[i][k] += lddt_i[k]; values[i][k] += lddt_i[k];
avg_lddt_counts[i][k] += 1; counts[i][k] += 1;
} }
if(!std::isnan(lddt_j[k])) { if(!std::isnan(lddt_j[k])) {
avg_lddt_values[j][k] += lddt_j[k]; values[j][k] += lddt_j[k];
avg_lddt_counts[j][k] += 1; counts[j][k] += 1;
} }
} }
} }
...@@ -347,9 +352,9 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) { ...@@ -347,9 +352,9 @@ MeanlDDTPtr CreateMeanlDDTHA(const DistanceMapPtr dmap) {
MeanlDDTPtr return_ptr(new MeanlDDT(len, nstruc)); MeanlDDTPtr return_ptr(new MeanlDDT(len, nstruc));
for(uint struc_idx = 0; struc_idx < nstruc; ++struc_idx) { for(uint struc_idx = 0; struc_idx < nstruc; ++struc_idx) {
for(uint res_idx = 0; res_idx < len; ++res_idx) { for(uint res_idx = 0; res_idx < len; ++res_idx) {
if(avg_lddt_counts[struc_idx][res_idx] > 0) { if(counts[struc_idx][res_idx] > 0) {
return_ptr->Set(res_idx, struc_idx, return_ptr->Set(res_idx, struc_idx,
avg_lddt_values[struc_idx][res_idx]/avg_lddt_counts[struc_idx][res_idx]); values[struc_idx][res_idx]/counts[struc_idx][res_idx]);
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment