From 650f45a47635e926266b263d2e3d4e51f0a399bb Mon Sep 17 00:00:00 2001 From: dialpuri Date: Tue, 19 Sep 2023 19:26:42 +0100 Subject: [PATCH 1/4] Changed backend to add torsions --- src/privateer/cpp/clipper-glyco.cpp | 68 ++++++++---- src/privateer/cpp/clipper-glyco.h | 13 +-- src/privateer/cpp/privateer-bind.cpp | 154 +++++++-------------------- 3 files changed, 94 insertions(+), 141 deletions(-) diff --git a/src/privateer/cpp/clipper-glyco.cpp b/src/privateer/cpp/clipper-glyco.cpp index 406bb04b..27c4b58f 100644 --- a/src/privateer/cpp/clipper-glyco.cpp +++ b/src/privateer/cpp/clipper-glyco.cpp @@ -3520,7 +3520,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tphi_c1c2o8c8 = " << torsions[5] << "\t\tpsi = " << torsions[1] << "\t\tomega_seven = " << torsions[2] << "\t\tomega_eight = " << torsions[3] << "\t\tomega_nine = " << torsions[4] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3627,7 +3627,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tphi_c1c2o8c8 = " << torsions[5] << "\t\tpsi = " << torsions[1] << "\t\tomega_seven = " << torsions[2] << "\t\tomega_eight = " << torsions[3] << "\t\tomega_nine = " << torsions[4] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3716,7 +3716,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << "\t\tomega_six = " << torsions[2] << "\t\tomega_seven = " << torsions[3] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3789,7 +3789,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << "\t\tomega = " << torsions[2] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3857,7 +3857,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3923,7 +3923,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -3990,7 +3990,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -4055,7 +4055,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -4140,7 +4140,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for when next_sugar has 6 members, link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -4189,7 +4189,7 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu DBG << "Torsions for when next_sugar has 5 members, link = " << link << ", phi = " << torsions[0] << "\t\tpsi = " << torsions[1] << "\t\tomega = " << torsions[2] << std::endl; } new_connection.set_linkage_atoms(donorAtom, acceptorAtom); - add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom); + add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), first_sugar.type().trim(), donorAtom, next_sugar.type().trim(), acceptorAtom, first_sugar.seqnum(), next_sugar.seqnum()); if(!torsions_zscore_database.database_array.empty()) { float Phi = clipper::Util::rad2d(phi); @@ -4212,13 +4212,17 @@ bool MGlycan::link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSu return false; } -void MGlycan::add_torsions_for_detected_linkages(float Phi, float Psi, clipper::String first_residue_name, clipper::MAtom first_atom, clipper::String second_residue_name, clipper::MAtom second_atom) +void MGlycan::add_torsions_for_detected_linkages(float Phi, float Psi, clipper::String first_residue_name, clipper::MAtom first_atom, clipper::String second_residue_name, clipper::MAtom second_atom, int first_residue_seqnum, int second_residue_seqnum) { if(!all_torsions_within_mglycan.empty()) { auto search_result = std::find_if(all_torsions_within_mglycan.begin(), all_torsions_within_mglycan.end(), [first_residue_name, second_residue_name](MGlycanTorsionSummary& element) { - return first_residue_name == element.first_residue_name && second_residue_name == element.second_residue_name; + return + first_residue_name == element.first_residue_name && + second_residue_name == element.second_residue_name + // NEED TO ADD CHECK FOR CORRECT LINKAGE DESIGNATION HERE + ; }); if(search_result != std::end(all_torsions_within_mglycan)) @@ -4229,6 +4233,23 @@ void MGlycan::add_torsions_for_detected_linkages(float Phi, float Psi, clipper:: found_torsion_description.linkage_descriptors.push_back(std::make_pair(donorPosition, acceptorPosition)); found_torsion_description.atoms.push_back(std::make_pair(first_atom, second_atom)); found_torsion_description.torsions.push_back(std::make_pair(Phi, Psi)); + + auto torsion_seach_result = std::find_if(found_torsion_description.combined_torsions.begin(), found_torsion_description.combined_torsions.end(), [donorPosition, acceptorPosition](std::pair, std::vector>>& element) + { + return donorPosition == element.first.first && + acceptorPosition == element.first.second; + }); + + if (torsion_seach_result != std::end(found_torsion_description.combined_torsions)) { + found_torsion_description.combined_torsions[torsion_seach_result-found_torsion_description.combined_torsions.begin()].second.push_back(std::make_pair(Phi, Psi)); + } + else { + std::pair tmp_torsions = std::make_pair(Phi, Psi); + std::vector> tmp_torsion_vector; + tmp_torsion_vector.push_back(tmp_torsions); + found_torsion_description.combined_torsions.push_back(std::make_pair(std::make_pair(donorPosition, acceptorPosition),tmp_torsion_vector)); + } + } else { @@ -4245,6 +4266,13 @@ void MGlycan::add_torsions_for_detected_linkages(float Phi, float Psi, clipper:: new_torsion.first_residue_name = first_residue_name; new_torsion.second_residue_name = second_residue_name; new_torsion.atoms.push_back(std::make_pair(first_atom, second_atom)); + // If donorPosition adn acceptorPositon are in linkkage_ddesc + // Go to vector vector and add to that one not the top level vector + + + std::vector> tmp_vector = {std::make_pair(Phi, Psi)}; + new_torsion.combined_torsions.push_back(std::make_pair(std::make_pair(donorPosition, acceptorPosition), tmp_vector)); + new_torsion.linkage_descriptors.push_back(std::make_pair(donorPosition, acceptorPosition)); new_torsion.torsions.push_back(std::make_pair(Phi, Psi)); all_torsions_within_mglycan.push_back(new_torsion); @@ -4266,6 +4294,10 @@ void MGlycan::add_torsions_for_detected_linkages(float Phi, float Psi, clipper:: first_torsion.first_residue_name = first_residue_name; first_torsion.second_residue_name = second_residue_name; first_torsion.atoms.push_back(std::make_pair(first_atom, second_atom)); + + std::vector> tmp_vector = {std::make_pair(Phi, Psi)}; + first_torsion.combined_torsions.push_back(std::make_pair(std::make_pair(donorPosition, acceptorPosition), tmp_vector)); + first_torsion.linkage_descriptors.push_back(std::make_pair(donorPosition, acceptorPosition)); first_torsion.torsions.push_back(std::make_pair(Phi, Psi)); @@ -5159,7 +5191,7 @@ void MGlycology::init ( const clipper::MiniMol& mmol, const clipper::MAtomNonBon psi = clipper::Util::twopi() + psi; mg.set_glycosylation_torsions ( clipper::Util::rad2d(phi), clipper::Util::rad2d(psi) ); - mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_n_roots[i].first.type().trim(), nd2, sugar.type().trim(), c1); + mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_n_roots[i].first.type().trim(), nd2, sugar.type().trim(), c1, potential_n_roots[i].first.seqnum(), sugar.seqnum()); // This is hella cursed. A really cursed hacky implementation just to support linkage highlights in SNFG diagrams for ASN-NAG linkage. // Ideally clipper::MGlycan::Linkage should have been reimplemented, but that would have taken too much time. @@ -5316,7 +5348,7 @@ void MGlycology::init ( const clipper::MiniMol& mmol, const clipper::MAtomNonBon psi = clipper::Util::twopi() + psi; mg.set_glycosylation_torsions ( clipper::Util::rad2d(phi), clipper::Util::rad2d(psi) ); - mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_o_roots[i].first.type().trim(), og1, sugar.type().trim(), c1); + mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_o_roots[i].first.type().trim(), og1, sugar.type().trim(), c1, potential_o_roots[i].first.seqnum(), sugar.seqnum()); list_of_glycans_modelled_as_glycosylation.push_back ( mg ); @@ -5400,7 +5432,7 @@ void MGlycology::init ( const clipper::MiniMol& mmol, const clipper::MAtomNonBon psi = clipper::Util::twopi() + psi; mg.set_glycosylation_torsions ( clipper::Util::rad2d(phi), clipper::Util::rad2d(psi) ); - mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_s_roots[i].first.type().trim(), sg, sugar.type().trim(), c1); + mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_s_roots[i].first.type().trim(), sg, sugar.type().trim(), c1, potential_s_roots[i].first.seqnum(), sugar.seqnum()); list_of_glycans_modelled_as_glycosylation.push_back ( mg ); @@ -5488,7 +5520,7 @@ void MGlycology::init ( const clipper::MiniMol& mmol, const clipper::MAtomNonBon mg.set_glycosylation_torsions ( clipper::Util::rad2d(phi), clipper::Util::rad2d(psi) ); - mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_c_roots[i].first.type().trim(), cd1, sugar.type().trim(), c1); + mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_c_roots[i].first.type().trim(), cd1, sugar.type().trim(), c1, potential_c_roots[i].first.seqnum(), sugar.seqnum()); if ( linked[j].second.monomer()+3 < mmol[linked[j].second.polymer()].size() ) // Make sure that checks for consensus sequence do not occur outside the array, therefore causing segfaults. @@ -5584,7 +5616,7 @@ void MGlycology::init ( const clipper::MiniMol& mmol, const clipper::MAtomNonBon psi = clipper::Util::twopi() + psi; mg.set_glycosylation_torsions ( clipper::Util::rad2d(phi), clipper::Util::rad2d(psi) ); - mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_p_roots[i].first.type().trim(), op, sugar.type().trim(), c1); + mg.add_torsions_for_detected_linkages(clipper::Util::rad2d(phi), clipper::Util::rad2d(psi), potential_p_roots[i].first.type().trim(), op, sugar.type().trim(), c1, potential_p_roots[i].first.seqnum(), sugar.seqnum()); list_of_glycans_modelled_as_glycosylation.push_back ( mg ); break; @@ -7499,4 +7531,4 @@ const std::vector < std::pair< clipper::MAtom, clipper::MAtomIndexSymmetry > > M }); return tmpresults; } -} +} \ No newline at end of file diff --git a/src/privateer/cpp/clipper-glyco.h b/src/privateer/cpp/clipper-glyco.h index d0ce1111..5e50851c 100644 --- a/src/privateer/cpp/clipper-glyco.h +++ b/src/privateer/cpp/clipper-glyco.h @@ -578,6 +578,7 @@ namespace clipper clipper::String second_residue_name; // acceptorResidue std::vector> atoms; // .first = donorAtom, .second = acceptorAtom std::vector> linkage_descriptors; // .first = donorPosition, .second = acceptorPosition + std::vector, std::vector>>> combined_torsions; // This needs to be changed std::vector> torsions; // .first = Phi, .second = Psi }; @@ -831,18 +832,12 @@ namespace clipper }; // class Node bool link_sugars ( int link, clipper::MSugar& first_sugar, clipper::MSugar& next_sugar, clipper::MAtom& donorAtom, clipper::MAtom& acceptorAtom, bool noncircular, privateer::json::GlobalTorsionZScore& torsions_zscore_database ); // true if there's been any problem - void add_torsions_for_detected_linkages(float Phi, float Psi, clipper::String first_residue_name, clipper::MAtom first_atom, clipper::String second_residue_name, clipper::MAtom second_atom); + void add_torsions_for_detected_linkages(float Phi, float Psi, clipper::String first_residue_name, clipper::MAtom first_atom, clipper::String second_residue_name, clipper::MAtom second_atom, int first_residue_seqnum, int second_residue_seqnum); std::vector return_torsion_summary_within_glycan() { return all_torsions_within_mglycan; }; const std::pair < clipper::MMonomer, clipper::MSugar >& get_root () const { return this->root; } const clipper::String& get_type () const { return kind_of_glycan; } // n-glycan, o-glycan, s-glycan, c-glycan, p-glycan or ligand // std::string get_root_by_name () const { return get_root().first.type().trim() + "-" + get_root().first.id().trim() + "/" + get_chain().substr(0,1); } - std::string get_root_by_name () const { - return get_root().second.type().trim() + - "-" + get_root().second.id().trim().substr(0, get_root().second.id().trim().find(":")) + - "/" + get_root_sugar_chainID().trim().substr(0,1) + "_" + get_root().first.type().trim() + - "-" + get_root().first.id().trim().substr(0, get_root().first.id().trim().find(":")) + - "/" + get_chain().substr(0,1); } - + std::string get_root_by_name () const { return get_root().second.type().trim() + "-" + get_root().second.id().trim() + "/" + get_root_sugar_chainID().trim().substr(0,1) + "_" + get_root().first.type().trim() + "-" + get_root().first.id().trim() + "/" + get_chain().substr(0,1); } std::string get_root_for_filename () { return get_root().second.type().trim() + get_root().second.id().trim() + "-[" + get_root_sugar_chainID().trim().substr(0,1) + "]_[" + get_chain().trim().substr(0,1) + "]-" + get_root().first.type().trim() + get_root().first.id().trim(); } std::string write_ring_ext_restraints ( float weight ); @@ -1000,4 +995,4 @@ namespace clipper } // namespace clipper -#endif +#endif \ No newline at end of file diff --git a/src/privateer/cpp/privateer-bind.cpp b/src/privateer/cpp/privateer-bind.cpp index 3946f5f6..9d6411bc 100644 --- a/src/privateer/cpp/privateer-bind.cpp +++ b/src/privateer/cpp/privateer-bind.cpp @@ -76,6 +76,15 @@ extern "C" std::vector read_file(const std::string &file, const std } } +struct TorsionEntry { + std::string sugar_1; + std::string sugar_2; + std::string atom_number_1; + std::string atom_number_2; + float phi; + float psi; +}; + struct TableEntry { std::string svg; @@ -90,121 +99,9 @@ struct TableEntry int puckering_err = 0; int chirality_err = 0; - // std::vector glycan_types; - - -}; - -struct GlycanData -{ - std::string glyconnect_id; - std::string glytoucan_id; - std::string wurcs; + std::vector torsions; }; -GlycanData -query_glycomics_database(clipper::MGlycan ¤tGlycan, const std::string& WURCS, std::vector &glycomics_database, bool returnClosestMatches = false, bool returnAllPossiblePermutations = false, int nThreads = 1) -{ - - std::string currentWURCS = WURCS; - - int valueLocation = privateer::util::find_index_of_value_from_wurcs(glycomics_database, WURCS); - if (!returnClosestMatches && currentGlycan.number_of_nodes() > 1) - { - if (valueLocation != -1 && glycomics_database[valueLocation].GlyConnectID != "NotFound") - { - std::string glytoucanID, glyconnectID; - glytoucanID = glycomics_database[valueLocation].GlyTouCanID; - if (glytoucanID.front() == '"' && glytoucanID.front() == '"') - { - glytoucanID.erase(0, 1); - glytoucanID.pop_back(); - } - glyconnectID = glycomics_database[valueLocation].GlyConnectID; - if (glyconnectID.front() == '"' && glyconnectID.front() == '"') - { - glyconnectID.erase(0, 1); - glyconnectID.pop_back(); - } - - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = glyconnectID; - glycan_data.glytoucan_id = glytoucanID; - return glycan_data; - } - else if (valueLocation != -1 && glycomics_database[valueLocation].GlyConnectID == "NotFound") - { - std::string glytoucanID = glycomics_database[valueLocation].GlyTouCanID; - if (glytoucanID.front() == '"' && glytoucanID.front() == '"') - { - glytoucanID.erase(0, 1); - glytoucanID.pop_back(); - } - - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = "NotFound"; - glycan_data.glytoucan_id = glytoucanID; - return glycan_data; - } - else - { - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = "Not Found"; - glycan_data.glytoucan_id = "NotFound"; - return glycan_data; - } - } - else - { - std::string glytoucanID = "Not Found"; - if (valueLocation != -1 && glycomics_database[valueLocation].GlyConnectID != "NotFound") - { - std::string glytoucanID, glyconnectID; - glytoucanID = glycomics_database[valueLocation].GlyTouCanID; - if (glytoucanID.front() == '"' && glytoucanID.front() == '"') - { - glytoucanID.erase(0, 1); - glytoucanID.pop_back(); - } - glyconnectID = glycomics_database[valueLocation].GlyConnectID; - if (glyconnectID.front() == '"' && glyconnectID.front() == '"') - { - glyconnectID.erase(0, 1); - glyconnectID.pop_back(); - } - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = glyconnectID; - glycan_data.glytoucan_id = glytoucanID; - return glycan_data; - } - else if (valueLocation != -1 && glycomics_database[valueLocation].GlyConnectID == "NotFound") - { - std::string glytoucanID = glycomics_database[valueLocation].GlyTouCanID; - if (glytoucanID.front() == '"' && glytoucanID.front() == '"') - { - glytoucanID.erase(0, 1); - glytoucanID.pop_back(); - } - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = "NotFound"; - glycan_data.glytoucan_id = glytoucanID; - return glycan_data; - } - else - { - GlycanData glycan_data; - glycan_data.wurcs = currentWURCS; - glycan_data.glyconnect_id = "Not Found"; - glycan_data.glytoucan_id = "Not Found"; - return glycan_data; - } - } -} extern "C" std::vector read_file_to_table(const std::string &file, const std::string &name) { @@ -278,7 +175,24 @@ extern "C" std::vector read_file_to_table(const std::string &file, c table_entry.chirality_err = err->chirality_err; - // std::vector list_of_glycans[i].return_torsion_summary_within_glycan() + std::vector torsion_list = list_of_glycans[i].return_torsion_summary_within_glycan(); + for(int i = 0; i < torsion_list.size(); i++) { + for(int j = 0; j < torsion_list[i].combined_torsions.size(); j++) + { + std::pair, std::vector>> torsion = torsion_list[i].combined_torsions[j]; + for (int k = 0; k < torsion.second.size(); k++) { + TorsionEntry te; + te.sugar_1 = torsion_list[i].first_residue_name; + te.sugar_2 = torsion_list[i].second_residue_name; + te.atom_number_1 = torsion.first.first; + te.atom_number_2 = torsion.first.second; + te.phi = torsion.second[k].first; + te.psi = torsion.second[k].second; + table_entry.torsions.emplace_back(te); + } + } + } + // table_entry.description = list_of_glycans[i].get_description(); table_list.emplace_back(table_entry); delete err; @@ -307,6 +221,16 @@ EMSCRIPTEN_BINDINGS(privateer_module) function("read_structure", &read_file); register_vector("vector"); + value_object("TorsionEntry") + .field("sugar_1", &TorsionEntry::sugar_1) + .field("sugar_2", &TorsionEntry::sugar_2) + .field("atom_number_1", &TorsionEntry::atom_number_1) + .field("atom_number_2", &TorsionEntry::atom_number_2) + .field("phi", &TorsionEntry::phi) + .field("psi", &TorsionEntry::psi); + + register_vector("vector"); + value_object("TableEntry") .field("svg", &TableEntry::svg) @@ -320,10 +244,12 @@ EMSCRIPTEN_BINDINGS(privateer_module) .field("anomer_err", &TableEntry::anomer_err) .field("puckering_err", &TableEntry::puckering_err) .field("chirality_err", &TableEntry::chirality_err) + .field("torsions", &TableEntry::torsions) ; // .field("description", &TableEntry::description); function("read_structure_to_table", &read_file_to_table); register_vector("Table"); + } From f2d49ae0e081c97fb52185d7ae55bf46a6e27e13 Mon Sep 17 00:00:00 2001 From: dialpuri Date: Tue, 19 Sep 2023 19:27:34 +0100 Subject: [PATCH 2/4] Basic functionality implemented -> style changes required --- .../components/GlycanDetail/GlycanDetail.jsx | 7 +- .../TorsionPlot/TorsionMultiPlot.jsx | 67 +++++++++++++++++++ .../components/TorsionPlot/TorsionPlot.jsx | 64 ++++++++++++++---- webserver/src/pages/Home/HomeSection.jsx | 12 +++- 4 files changed, 133 insertions(+), 17 deletions(-) create mode 100644 webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx diff --git a/webserver/src/components/GlycanDetail/GlycanDetail.jsx b/webserver/src/components/GlycanDetail/GlycanDetail.jsx index 5b14496d..16d070b0 100644 --- a/webserver/src/components/GlycanDetail/GlycanDetail.jsx +++ b/webserver/src/components/GlycanDetail/GlycanDetail.jsx @@ -2,7 +2,8 @@ import {lazy, useCallback, useEffect, useState} from "react"; import {MoorhenContainer, MoorhenContextProvider} from 'moorhen' import GlycanDetailInfoBox from "./GlycanDetailInfoBox"; // import GlycanDetailTable from "./GlycanDetailTable"; -import TorsionPlot from "../TorsionPlot/TorsionPlot"; +// import TorsionPlot from "../TorsionPlot/TorsionPlot"; +import TorsionMultiPlot from "../TorsionPlot/TorsionMultiPlot"; const GlycanDetailTable = lazy(() => import('./GlycanDetailTable')); @@ -82,9 +83,9 @@ export default function GlycanDetail({tableData, hideMoorhen, setHideMoorhen, ro - {/*

Torsion Plots

+

Torsion Plots

- */} + ); } diff --git a/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx b/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx new file mode 100644 index 00000000..6cb89b96 --- /dev/null +++ b/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx @@ -0,0 +1,67 @@ +import { useEffect, useState } from "react"; +import TorsionPlot from "./TorsionPlot"; + + +function sortTorsions(torsions) { + const linkage_set = new Set(); + + torsions.map((torsion) => { + let linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + linkage_set.add(linkage_string) + }) + + const linkage_array = Array.from(linkage_set) + + const sorted_linkage_array = {} + + linkage_array.map((item) => { + sorted_linkage_array[item] = [] + }) + + torsions.map((torsion) => { + let linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + sorted_linkage_array[linkage_string].push({"phi": torsion.phi, "psi": torsion.psi}) + }) + + return [linkage_array, sorted_linkage_array] +} + +function TorsionMultiPlotTabs({torsions, setTab}) { + + const [linkage_array, sorted_linkage_array] = sortTorsions(torsions) + + console.log(linkage_array, sorted_linkage_array) + + return ( + linkage_array.map((item, index) => { + return ( +
+ +
+ ) + }) + ) +} + +export default function TorsionMultiPlot({torsions}) { + + const [tab, setTab] = useState(0) + + const [linkage_array, sorted_linkage_array] = sortTorsions(torsions) + console.log(linkage_array, sorted_linkage_array) + + useEffect(() => {console.log("TAB UODATED", tab)}, [tab]) + + return ( + <> +
+ +
+ + + + ) +} \ No newline at end of file diff --git a/webserver/src/components/TorsionPlot/TorsionPlot.jsx b/webserver/src/components/TorsionPlot/TorsionPlot.jsx index 440e20d0..9b91c39c 100644 --- a/webserver/src/components/TorsionPlot/TorsionPlot.jsx +++ b/webserver/src/components/TorsionPlot/TorsionPlot.jsx @@ -1,16 +1,36 @@ import { useEffect, useState } from 'react'; import Plot from 'react-plotly.js'; -export default function TorsionPlot({}) { +export default function TorsionPlot({linkage_type, sorted_torsion_list}) { + + const linkage_db = { + "ASN-1,2-NAG": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/ASN-NAG_reduced.json', + "NAG-1,4-NAG": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/NAG-NAG_reduced.json', + "NAG-1,4-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/NAG-MAN_reduced.json', + "MAN-1,3-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/MAN-MAN_reduced.json', + "MAN-1,6-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/MAN-MAN_reduced.json', + "MAN-1,3-BMA": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/BMA-MAN_reduced.json', + + } + + const bin_db = { + "ASN-1,2-NAG": {start: 0, end: 360,size: 4}, + "NAG-1,4-NAG": {start: -180, end: 180, size: 4}, + "NAG-1,4-MAN": {start: -180, end: 180, size: 4}, + "MAN-1,3-MAN": {start: -180, end: 180, size: 4}, + "MAN-1,6-MAN": {start: -180, end: 180, size: 4}, + "MAN-1,3-BMA": {start: -180, end: 180, size: 4}, + } const [trace, setTrace] = useState({}) + const [overlay, setOverlay] = useState({}) + + useEffect(() => {console.log("sorted_torsion_list updated", sorted_torsion_list)},[sorted_torsion_list]) useEffect(() => { - fetch('https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/ASN-NAG_reduced.json') + fetch(linkage_db[linkage_type]) .then((response) => response.json()) .then((responseJson) => { - console.log(responseJson) - let xData = [] let yData = [] @@ -18,6 +38,7 @@ export default function TorsionPlot({}) { xData.push(parseFloat(responseJson[i].Phi)) yData.push(parseFloat(responseJson[i].Psi)) } + setTrace({ x: xData, y: yData, @@ -35,25 +56,44 @@ export default function TorsionPlot({}) { size: 4 }, autobiny: false, - ybins: { - start: 0, - end: 360, - size: 4 - }, + ybins: bin_db[linkage_type] }) }) .catch((error) => { console.error(error); + console.log(linkage_type, " is not in the DB most likely ") }); - }, []) + + let overlay_phi = [] + let overlay_psi = [] + + for (let i = 0; i < sorted_torsion_list[linkage_type].length; i++) { + overlay_phi.push(sorted_torsion_list[linkage_type][i].phi) + overlay_psi.push(sorted_torsion_list[linkage_type][i].psi) + + } + + setOverlay({ + x: overlay_phi, + y: overlay_psi, + mode: 'markers', + type: 'scatter', + marker: { + size: 8, + color: 'blue', + symbol: ['x'] + }, + }) + + }, [linkage_type]) return ( diff --git a/webserver/src/pages/Home/HomeSection.jsx b/webserver/src/pages/Home/HomeSection.jsx index 368919c6..ec8d5e6e 100644 --- a/webserver/src/pages/Home/HomeSection.jsx +++ b/webserver/src/pages/Home/HomeSection.jsx @@ -33,9 +33,17 @@ export default function HomeSection() { let table_data = []; for (var i = 0; i < x.size(); i++) { - table_data.push(x.get(i)) - } + let table_entry = x.get(i) + + let collected_torsions = [] + for(var j = 0; j < table_entry.torsions.size(); j++) { + collected_torsions.push(table_entry.torsions.get(j)); + } + table_entry.torsions = collected_torsions + table_data.push(table_entry) + } + if (x.size() == 0 ) { setLoadingText("There were no detected glycans in this file.") setFallBack(true) From 8d2f086ae8afa80460a3119ef6424484fb928ebb Mon Sep 17 00:00:00 2001 From: dialpuri Date: Wed, 20 Sep 2023 10:12:49 +0100 Subject: [PATCH 3/4] Restyled torsion plots Added proper tab view with state reassignment --- .../components/GlycanDetail/GlycanDetail.jsx | 4 +- .../TorsionPlot/TorsionMultiPlot.jsx | 49 ++++++++++++------- .../components/TorsionPlot/TorsionPlot.jsx | 46 ++++++++--------- webserver/src/data/Constants.jsx | 33 ++++++++++++- 4 files changed, 86 insertions(+), 46 deletions(-) diff --git a/webserver/src/components/GlycanDetail/GlycanDetail.jsx b/webserver/src/components/GlycanDetail/GlycanDetail.jsx index 16d070b0..bf9100c8 100644 --- a/webserver/src/components/GlycanDetail/GlycanDetail.jsx +++ b/webserver/src/components/GlycanDetail/GlycanDetail.jsx @@ -43,6 +43,7 @@ export default function GlycanDetail({tableData, hideMoorhen, setHideMoorhen, ro const [width, setWidth] = useState(800); const [height, setHeight] = useState(600); + const [torsionTab, setTorsionTab] = useState(0) return (
@@ -52,6 +53,7 @@ export default function GlycanDetail({tableData, hideMoorhen, setHideMoorhen, ro @@ -85,7 +87,7 @@ export default function GlycanDetail({tableData, hideMoorhen, setHideMoorhen, ro

Torsion Plots

- +
); } diff --git a/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx b/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx index 6cb89b96..5d750785 100644 --- a/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx +++ b/webserver/src/components/TorsionPlot/TorsionMultiPlot.jsx @@ -6,7 +6,13 @@ function sortTorsions(torsions) { const linkage_set = new Set(); torsions.map((torsion) => { - let linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + let linkage_string = "" + if (torsion.sugar_1 == "ASN") { + linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + } + else { + linkage_string = torsion.sugar_2 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_1 + } linkage_set.add(linkage_string) }) @@ -19,7 +25,14 @@ function sortTorsions(torsions) { }) torsions.map((torsion) => { - let linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + let linkage_string = "" + if (torsion.sugar_1 == "ASN") { + linkage_string = torsion.sugar_1 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_2 + } + else { + linkage_string = torsion.sugar_2 + "-" + torsion.atom_number_2 + "," + torsion.atom_number_1 + "-" + torsion.sugar_1 + } + sorted_linkage_array[linkage_string].push({"phi": torsion.phi, "psi": torsion.psi}) }) @@ -30,38 +43,38 @@ function TorsionMultiPlotTabs({torsions, setTab}) { const [linkage_array, sorted_linkage_array] = sortTorsions(torsions) - console.log(linkage_array, sorted_linkage_array) - return ( linkage_array.map((item, index) => { return ( -
- -
+ +
  • + +
  • + ) }) ) } -export default function TorsionMultiPlot({torsions}) { +export default function TorsionMultiPlot({torsions, tab, setTab}) { - const [tab, setTab] = useState(0) const [linkage_array, sorted_linkage_array] = sortTorsions(torsions) - console.log(linkage_array, sorted_linkage_array) - useEffect(() => {console.log("TAB UODATED", tab)}, [tab]) + useEffect(() => { + console.log(tab) + setTab(0) + }, []) return ( - <> -
    - +
    +
    +
      + +
    - +
    ) } \ No newline at end of file diff --git a/webserver/src/components/TorsionPlot/TorsionPlot.jsx b/webserver/src/components/TorsionPlot/TorsionPlot.jsx index 9b91c39c..02a29d9a 100644 --- a/webserver/src/components/TorsionPlot/TorsionPlot.jsx +++ b/webserver/src/components/TorsionPlot/TorsionPlot.jsx @@ -1,31 +1,13 @@ import { useEffect, useState } from 'react'; import Plot from 'react-plotly.js'; +import { linkage_db, bin_db} from '../../data/Constants'; export default function TorsionPlot({linkage_type, sorted_torsion_list}) { - const linkage_db = { - "ASN-1,2-NAG": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/ASN-NAG_reduced.json', - "NAG-1,4-NAG": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/NAG-NAG_reduced.json', - "NAG-1,4-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/NAG-MAN_reduced.json', - "MAN-1,3-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/MAN-MAN_reduced.json', - "MAN-1,6-MAN": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/MAN-MAN_reduced.json', - "MAN-1,3-BMA": 'https://raw.githubusercontent.com/glycojones/privateer/master/data/linkage_torsions/unprocessed_files/BMA-MAN_reduced.json', - - } - - const bin_db = { - "ASN-1,2-NAG": {start: 0, end: 360,size: 4}, - "NAG-1,4-NAG": {start: -180, end: 180, size: 4}, - "NAG-1,4-MAN": {start: -180, end: 180, size: 4}, - "MAN-1,3-MAN": {start: -180, end: 180, size: 4}, - "MAN-1,6-MAN": {start: -180, end: 180, size: 4}, - "MAN-1,3-BMA": {start: -180, end: 180, size: 4}, - } - + const [trace, setTrace] = useState({}) const [overlay, setOverlay] = useState({}) - - useEffect(() => {console.log("sorted_torsion_list updated", sorted_torsion_list)},[sorted_torsion_list]) + const [linkageFound, setLinkageFound] = useState({}) useEffect(() => { fetch(linkage_db[linkage_type]) @@ -35,8 +17,8 @@ export default function TorsionPlot({linkage_type, sorted_torsion_list}) { let yData = [] for (let i = 0; i < responseJson.length; i++) { - xData.push(parseFloat(responseJson[i].Phi)) - yData.push(parseFloat(responseJson[i].Psi)) + xData.push(parseFloat(responseJson[i].phi)) + yData.push(parseFloat(responseJson[i].psi)) } setTrace({ @@ -58,11 +40,12 @@ export default function TorsionPlot({linkage_type, sorted_torsion_list}) { autobiny: false, ybins: bin_db[linkage_type] }) - + setLinkageFound(true) }) .catch((error) => { console.error(error); console.log(linkage_type, " is not in the DB most likely ") + setLinkageFound(false) }); let overlay_phi = [] @@ -89,13 +72,24 @@ export default function TorsionPlot({linkage_type, sorted_torsion_list}) { }, [linkage_type]) return ( + !linkageFound? ( +

    {linkage_type} does not have enough datapoints to generate a torsion plot.

    + ): ); } diff --git a/webserver/src/data/Constants.jsx b/webserver/src/data/Constants.jsx index 0c48eb22..1384b858 100644 --- a/webserver/src/data/Constants.jsx +++ b/webserver/src/data/Constants.jsx @@ -37,4 +37,35 @@ export const COLUMNS = [ // accessor: 'wurcs', // }, -]; \ No newline at end of file +]; + +export const linkage_db = { + "BMA-1,6-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/BMA-1,6-MAN.json', + "ASN-1,2-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/ASN-1,1-NAG.json', + "MAN-1,6-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,6-MAN.json', + "NAG-1,3-FUC" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,3-FUC.json', + "NAG-1,4-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-NAG.json', + "NAG-1,6-FUC" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,6-FUC.json', + "NAG-1,4-BMA" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-BMA.json', + "BMA-1,3-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/BMA-1,3-MAN.json', + "NAG-1,4-GAL" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-GAL.json', + "MAN-1,3-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,3-MAN.json', + "MAN-1,2-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,2-MAN.json', + "MAN-1,2-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,2-NAG.json' + } + + export const bin_db = { + "ASN-1,2-NAG": {start: 0, end: 360,size: 4}, + "BMA-1,6-MAN" : {start: -180, end: 180, size: 4}, + "BMA-1,6-MAN" : {start: -180, end: 180, size: 4}, + "MAN-1,6-MAN" : {start: -180, end: 180, size: 4}, + "NAG-1,3-FUC" : {start: -180, end: 180, size: 4}, + "NAG-1,4-NAG" : {start: -180, end: 180, size: 4}, + "NAG-1,6-FUC" : {start: -180, end: 180, size: 4}, + "NAG-1,4-BMA" : {start: -180, end: 180, size: 4}, + "BMA-1,3-MAN" : {start: -180, end: 180, size: 4}, + "NAG-1,4-GAL" : {start: -180, end: 180, size: 4}, + "MAN-1,3-MAN" : {start: -180, end: 180, size: 4}, + "MAN-1,2-MAN" : {start: -180, end: 180, size: 4}, + "MAN-1,2-NAG" : {start: -180, end: 180, size: 4}, + } From a825d388502e45ebef3b7686a508ad9f2487574e Mon Sep 17 00:00:00 2001 From: dialpuri Date: Wed, 20 Sep 2023 10:31:20 +0100 Subject: [PATCH 4/4] Changed linkage_db and bin_db naming scheme --- .../components/TorsionPlot/TorsionPlot.jsx | 2 +- webserver/src/data/Constants.jsx | 35 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/webserver/src/components/TorsionPlot/TorsionPlot.jsx b/webserver/src/components/TorsionPlot/TorsionPlot.jsx index 02a29d9a..645a0218 100644 --- a/webserver/src/components/TorsionPlot/TorsionPlot.jsx +++ b/webserver/src/components/TorsionPlot/TorsionPlot.jsx @@ -44,7 +44,7 @@ export default function TorsionPlot({linkage_type, sorted_torsion_list}) { }) .catch((error) => { console.error(error); - console.log(linkage_type, " is not in the DB most likely ") + console.log(linkage_type," is not in the DB most likely ") setLinkageFound(false) }); diff --git a/webserver/src/data/Constants.jsx b/webserver/src/data/Constants.jsx index 1384b858..23b6da76 100644 --- a/webserver/src/data/Constants.jsx +++ b/webserver/src/data/Constants.jsx @@ -40,32 +40,31 @@ export const COLUMNS = [ ]; export const linkage_db = { - "BMA-1,6-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/BMA-1,6-MAN.json', - "ASN-1,2-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/ASN-1,1-NAG.json', + "GAL-1,4-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/GAL-1,4-NAG.json', + "NAG-1,2-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,2-MAN.json', "MAN-1,6-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,6-MAN.json', - "NAG-1,3-FUC" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,3-FUC.json', + "FUC-1,3-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/FUC-1,3-NAG.json', + "MAN-1,3-BMA" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,3-BMA.json', "NAG-1,4-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-NAG.json', - "NAG-1,6-FUC" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,6-FUC.json', - "NAG-1,4-BMA" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-BMA.json', - "BMA-1,3-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/BMA-1,3-MAN.json', - "NAG-1,4-GAL" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/NAG-1,4-GAL.json', + "ASN-1,2-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/ASN-1,2-NAG.json', + "MAN-1,6-BMA" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,6-BMA.json', + "BMA-1,4-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/BMA-1,4-NAG.json', + "FUC-1,6-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/FUC-1,6-NAG.json', "MAN-1,3-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,3-MAN.json', "MAN-1,2-MAN" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,2-MAN.json', - "MAN-1,2-NAG" : 'https://raw.githubusercontent.com/Dialpuri/N-glycanTorsionDatabase/main/data_json/MAN-1,2-NAG.json' } - export const bin_db = { - "ASN-1,2-NAG": {start: 0, end: 360,size: 4}, - "BMA-1,6-MAN" : {start: -180, end: 180, size: 4}, - "BMA-1,6-MAN" : {start: -180, end: 180, size: 4}, +export const bin_db = { + "ASN-1,2-NAG" : {start: 0, end: 360,size: 4}, + "NAG-1,2-MAN" : {start: -180, end: 180, size: 4}, "MAN-1,6-MAN" : {start: -180, end: 180, size: 4}, - "NAG-1,3-FUC" : {start: -180, end: 180, size: 4}, + "FUC-1,3-NAG" : {start: -180, end: 180, size: 4}, + "MAN-1,3-BMA" : {start: -180, end: 180, size: 4}, "NAG-1,4-NAG" : {start: -180, end: 180, size: 4}, - "NAG-1,6-FUC" : {start: -180, end: 180, size: 4}, - "NAG-1,4-BMA" : {start: -180, end: 180, size: 4}, - "BMA-1,3-MAN" : {start: -180, end: 180, size: 4}, - "NAG-1,4-GAL" : {start: -180, end: 180, size: 4}, + "GAL-1,4-NAG" : {start: -180, end: 180, size: 4}, + "MAN-1,6-BMA" : {start: -180, end: 180, size: 4}, + "BMA-1,4-NAG" : {start: -180, end: 180, size: 4}, + "FUC-1,6-NAG" : {start: -180, end: 180, size: 4}, "MAN-1,3-MAN" : {start: -180, end: 180, size: 4}, "MAN-1,2-MAN" : {start: -180, end: 180, size: 4}, - "MAN-1,2-NAG" : {start: -180, end: 180, size: 4}, }