diff --git a/ippisite/ippidb/static/css/targetcentric.css b/ippisite/ippidb/static/css/targetcentric.css index 013d9cd99095247272836a2c4c837a5f1a70ff3f..0c0cf389f6bef19b043fa1afc32f249d7c9431f5 100644 --- a/ippisite/ippidb/static/css/targetcentric.css +++ b/ippisite/ippidb/static/css/targetcentric.css @@ -194,3 +194,16 @@ a.infobulle:hover span, a.infobulle:focus span{ transform:scale(1) rotate(0); opacity:1; } + +table.gradiant{ + width:inherit; + table-layout: fixed; + height:50px; +} + +table.gradiant td{ + overflow: visible; + border-right: none; + white-space: nowrap; + text-align: left; +} \ No newline at end of file diff --git a/ippisite/ippidb/static/js/targetcentric.js b/ippisite/ippidb/static/js/targetcentric.js index 5395a107e2b3dc4ca311fc273b7f3ee2d70e83ec..a496000b2d4063dec970ca98616bb4d6db3b8834 100644 --- a/ippisite/ippidb/static/js/targetcentric.js +++ b/ippisite/ippidb/static/js/targetcentric.js @@ -410,7 +410,7 @@ function loadNGL(url, callback){ hasinteract = 1; var labelsliderinterac = createElement("label", {}, {}, "", {'for':'isolevel' + chain.pdb_chain_id}); - labelsliderinterac.innerHTML = 'Adjust predictive interactibility surface on ' + chain.pdb_chain_id; + labelsliderinterac.innerHTML = 'Adjust predictive interactibility surface on chain ' + chain.pdb_chain_id; divchain.appendChild(labelsliderinterac); divchain.appendChild(createElement('br')); var divdropdowninterac = createElement("div",{},{},"dropdown"); @@ -491,7 +491,7 @@ function loadNGL(url, callback){ var labelslider = createElement("label", {}, {}, "", {'for':'isolevel' + chain.pdb_chain_id}); - labelslider.innerHTML = 'Adjust predictive surface druggable on ' + chain.pdb_chain_id; + labelslider.innerHTML = 'Adjust predictive surface druggable on chain ' + chain.pdb_chain_id; var divvalueslider = createElement("div", {}, {}, "", {'id': 'valueisolevel' + chain.pdb_chain_id}); divvalueslider.innerHTML = 'current value: 0.7' divchainmrc.appendChild(labelslider); diff --git a/ippisite/ippidb/templates/targetcentric.html b/ippisite/ippidb/templates/targetcentric.html index 6915e5f50362db1b304fd7238092d41fe74e8977..28cd0e9dc78ac637e41ef6d76963b6edbadfc79b 100644 --- a/ippisite/ippidb/templates/targetcentric.html +++ b/ippisite/ippidb/templates/targetcentric.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load humanize %} {% load customtags %} {% load static %} {% block title %}Target Centric view{% endblock %} @@ -142,19 +143,41 @@ </div> </div> <div class="card"> - <div class="card-title text-center"> - <a class="infobulle" href='#'> - <i class="fas fa-question-circle fa-2x"></i> - <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas pulvinar ornare hendrerit. - Phasellus urna neque, vehicula in eleifend ut, aliquam quis nunc. Nam dapibus lobortis nulla id faucibus. - Morbi rhoncus libero at lectus iaculis sagittis. Phasellus egestas enim odio, porta lobortis neque sodales - vitae. Fusce molestie posuere ultricies. Sed interdum ipsum vel metus condimentum, ac vehicula enim molestie. - Nunc pharetra tortor ullamcorper lacinia viverra. Pellentesque in tempor mauris. Integer convallis urna a - ligula ultricies venenatis. Duis ut congue magna. </span> - </a> - <strong>Cavities</strong> - <small>For information, a Zscore is given when you mouseover a cavity name. If its value is greater than {{ avg_std|get_zscore_threshold }} (-2 x the standard deviation), it should be interpreted with caution.</small> - + <div class="card-title"> + <div class="row text-center mt-3"> + <div class="col-12"> + <a class="infobulle" href='#'> + <i class="fas fa-question-circle fa-2x"></i> + <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas pulvinar ornare hendrerit. + Phasellus urna neque, vehicula in eleifend ut, aliquam quis nunc. Nam dapibus lobortis nulla id faucibus. + Morbi rhoncus libero at lectus iaculis sagittis. Phasellus egestas enim odio, porta lobortis neque sodales + vitae. Fusce molestie posuere ultricies. Sed interdum ipsum vel metus condimentum, ac vehicula enim molestie. + Nunc pharetra tortor ullamcorper lacinia viverra. Pellentesque in tempor mauris. Integer convallis urna a + ligula ultricies venenatis. Duis ut congue magna. </span> + </a> + <strong> Cavities </strong> + </div> + </div> + <div class="row text-justify ml-3 mr-3"> + <div class="col-8 text-wrap"> + Gradient colors for table is based on maximum and minimum zscore in the matrix. Zscore is given when you mouseover a cavity name. Be carefull, if its value is greater + than {{ avg_std|get_zscore_threshold|floatformat:2|intcomma }} (-2 x the standard deviation), + it should be interpreted with caution. + </div> + <div class="col-4"> + <table class="gradiant"><tbody><tr> + {% for td in avg_std|make_list %} + {% if forloop.first %} + <td style="background-color:rgb({{ td|get_color:avg_std }})" title="{{ td|get_zscore:avg_std }}">{{ td|get_zscore:avg_std|floatformat:2|intcomma }}</td> + {% elif forloop.last %} + <td style="direction: rtl;background-color:rgb({{ td|get_color:avg_std }})" title="{{ td|get_zscore:avg_std }}">{{ td|get_zscore:avg_std|floatformat:2|intcomma }}</td> + {% else %} + <td style="background-color:rgb({{ td|get_color:avg_std }})" title="{{ td|get_zscore:avg_std }}"> </td> + {% endif %} + {% endfor %} + </tr></tbody></table> + </div> + </div> </div> <div class="card-body"> <table id="cavitiestable" class="table table-hover shadow table-responsive table-sm zui-table table-header-rotated"> diff --git a/ippisite/ippidb/templatetags/customtags.py b/ippisite/ippidb/templatetags/customtags.py index 830662f8046cda1491e81f4fc49a8b0ba489ca2b..65df143b70bb8fe5d762f22ce53e0bbf80a7b837 100644 --- a/ippisite/ippidb/templatetags/customtags.py +++ b/ippisite/ippidb/templatetags/customtags.py @@ -255,3 +255,9 @@ def get_color(distance, avg_std): @register.filter def get_zscore_threshold(avg_std): return -2 * avg_std.std + + +@register.filter +def make_list(avg_std): + step = (avg_std.maximum - avg_std.minimum) / 25 + return np.arange(avg_std.minimum, avg_std.maximum + step, step) diff --git a/ippisite/ippisite/settings.py b/ippisite/ippisite/settings.py index eba17e7adbf26a50e0ee19c4a1c06194758c43d3..361ed493a77814266757148e64b7e59936e3edb5 100644 --- a/ippisite/ippisite/settings.py +++ b/ippisite/ippisite/settings.py @@ -43,6 +43,7 @@ INSTALLED_APPS = [ "django.contrib.messages", "django.contrib.staticfiles", "django.contrib.sitemaps", + "django.contrib.humanize", "django_extensions", "django_celery_results", "crispy_forms", diff --git a/ippisite/ippisite/settings.template.py b/ippisite/ippisite/settings.template.py index bf31edfcc038d87e59da4b4daabd28b05464628e..a09b37484a706d851a1e21931a8c8fe430fd5dec 100644 --- a/ippisite/ippisite/settings.template.py +++ b/ippisite/ippisite/settings.template.py @@ -46,6 +46,7 @@ INSTALLED_APPS = [ "django.contrib.messages", "django.contrib.staticfiles", "django.contrib.sitemaps", + "django.contrib.humanize", "django_extensions", "django_celery_results", "crispy_forms",