Difference between revisions of "Template:Heidelberg/safetynet/JS"

 
(39 intermediate revisions by the same user not shown)
Line 1: Line 1:
console.log($("#hyperreference1"));
+
function safetyblast_create_table(name, organism, organism_safety,
 +
                                  functionality, functionality_safety, id,
 +
                                  identity, e_value, onkogenes) {
  
function pwncors(site) {
+
  var table_head = [
    var xmlSource = site
+
    'Name', 'Organism', 'Group', 'Functionality', 'ID', 'Identity', 'E-Value',
 +
    'Onkogenicity'
 +
  ];
  
    var yqlURL = [
+
  var div = document.getElementById('safety_table');
        "http://query.yahooapis.com/v1/public/yql",
+
   var table = document.createElement('table');
        "?q=" + encodeURIComponent("select * from xml where url='" + xmlSource + "'"),
+
   var thead = document.createElement('thead');
        "&format=xml&callback=?"
+
   var tbody = document.createElement('tbody');
    ].join("");
+
   console.log("putting...");
+
   $.getJSON('http://allorigins.us/get?method=raw&url=' + encodeURIComponent(site) + '&callback=?', function(data){
+
console.log(data.content);
+
   });
+
  console.log("done!");
+
}
+
  
pwncors("http://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=put&DATABASE=swissprot&PROGRAM=blastp&QUERY=AAAAAAAAAA");
+
  $(div).empty();
  
$("#hyperreference1").on('click', function() {
+
  var tr_head = document.createElement('tr');
+
  for (var i = 0; i < 8; i++) {
     var fastain = $('#push_sequence').val();
+
     var td_head = document.createElement('th');
    var fastaout = "";
+
     td_head.append(document.createTextNode(table_head[i]));
     var start = 0;
+
     tr_head.appendChild(td_head);
    //Fastain contains either a FASTA or a blank seqeunce
+
  }
    if(fastain.startsWith('>')){
+
  thead.appendChild(tr_head);
        start = 1;
+
     }
+
    fastain = fastain.split('\n');
+
   
+
    for(var i = start; i < fastain.length; i++){
+
        fastaout += fastain[i];
+
    }
+
  
    $("#first_input").append('<a target="_blank" href="http://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=put&DATABASE=swissprot&PROGRAM=blastp&QUERY=' + fastaout + '" id="link1" style="display: none">Link to NCBI</a>');
+
  for (var j = 0; j < organism.length; j++) {
     $('#link1')[0].click();
+
     var table_body = [];
   
+
});
+
  
$("#hyperreference0").click(function() {
+
     table_body[0] = name[j];
     var fastain = $('#push_sequence').val();
+
     table_body[1] = organism[j];
     var fastaout = "";
+
     table_body[2] = "S" + organism_safety[j].toString();
     var start = 0;
+
     table_body[3] = functionality[j];
    //Fastain contains either a FASTA or a blank seqeunce
+
    if(fastain.startsWith('>')){
+
        start = 1;
+
     }
+
    fastain = fastain.split('\n');
+
   
+
    for(var i = start; i < fastain.length; i++){
+
        fastaout += fastain[i];
+
    }
+
  
     pwncors("http://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=put&DATABASE=swissprot&PROGRAM=blastp&QUERY=" + fastaout);
+
     table_body[4] = id[j];
});
+
    table_body[5] = identity[j];
           
+
    table_body[6] = e_value[j];
$("#hyperreference2").one('click', function() {
+
    table_body[7] = onkogenes[j];
  
     var ncbi_rid = $('#get_sequence').val();
+
     var tr_body = document.createElement('tr');
   
+
     for (var k = 0; k < 8; k++) {
     $("#second_input").append('<a target="_blank" href="http://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=get&FORMAT_TYPE=text&RID=' + ncbi_rid + '" id="link2" style="display: none">Link to NCBI Text</a>');
+
      var td_body = document.createElement('td');
    $("#link2")[0].click();
+
});
+
               
+
$("#hyperreference3").one('click', function() {
+
+
    var ncbi_text_file = $('#get_safety').val();
+
   
+
    getShit(ncbi_text_file);
+
});
+
  
function getShit(msg) {
+
      if (k == 3) {
 
+
 
+
        var child_node = msg;
+
   
+
  
         var regexp = />|Gaps/g;
+
         var inner_func = table_body[k].split(',');
 +
        for (var w = 0; w < functionality[j].split(',').length; w++) {
 +
          var tr_inner = document.createElement('tr');
 +
          var td_inner = document.createElement('td');
 +
          td_inner.append(document.createTextNode(inner_func[w]));
 +
          tr_inner.appendChild(td_inner);
 +
          td_body.appendChild(tr_inner);
 +
        }
  
         var msd = [];
+
      } else {
         while (regexp.exec(child_node) !== null) {
+
         td_body.append(document.createTextNode(table_body[k]));
            msd.push(regexp.lastIndex);
+
         if (organism_safety[j] > 1 && k == 2) {
 +
          td_body.style.backgroundColor = 'red';
 +
        } else if (organism_safety[j] <= 1 && k == 2) {
 +
          td_body.style.backgroundColor = 'green';
 +
        } else {
 +
          // Nothing
 
         }
 
         }
+
      }
           
+
        var regexp_brackets = /\[(.+?)\]/g;
+
        var organism_match = [];
+
        var functionalities = [];
+
        var e_values = [];
+
        var identities_arr = [];
+
        var safety_arr = []; 
+
        var safety_onko = [];
+
        var ids = [];
+
        var mbd = [];
+
        var names = [];
+
        var GOs = [];
+
        var k=0;
+
   
+
    //Get results names & results_ID
+
   
+
    for(var i=0; i<=msd.length-1;i+=1) {
+
            var substring = child_node.substring(msd[i],msd[i+1]);
+
            var get_length = substring.search('Length');
+
            var header = substring.substring(0, get_length);
+
            var header_split = header.split(" ");
+
       
+
            var body = substring.substring(get_length);
+
            var body_split = body.split(" ");
+
            var expect = body_split.indexOf('Expect');
+
            var identities = body_split.indexOf('Identities');
+
       
+
       
+
       
+
       
+
       
+
       
+
       
+
       
+
            var search_recname = header_split.indexOf('RecName:');
+
            var search_altname = header_split.indexOf('AltName:');
+
   
+
       
+
            if(search_recname!=-1){
+
  
                var search_result_ID = header_split[0].substring(0,header_split[search_recname-1].length-2);
+
      if (functionality_safety[j] && k == 3) {
                var name = "";
+
        td_body.style.backgroundColor = 'red';
                if(search_altname !=-1) {
+
      } else if (!functionality_safety[j] && k == 3) {
                    for(var t=1; t<search_altname-search_recname; t++) {
+
        td_body.style.backgroundColor = 'green';
                        name += header_split[search_recname+t] + " ";
+
      } else {
                    } 
+
        // Nothing
                   
+
      }
                } else {
+
      tr_body.appendChild(td_body);
                    for(var s=1; s<header_split.length-search_recname; s++) {
+
                        name += header_split[search_recname+s] + " ";
+
                    }
+
                }
+
             
+
                name = name.replace( /\n/g, " " ).substring(5, name.length);
+
                var recname = name.search('RecName:');
+
                var altname = name.search('AltName:');
+
              var result_name = "";
+
                if(recname !=-1) {
+
                    var next_split = name.split(" ");
+
           
+
                    for(var r=0; r<next_split.indexOf('RecName:')-1; r++) {
+
                        result_name += next_split[r] + " ";
+
                    }
+
                } else if(altname !=-1) {
+
                    result_name = name.substring(0, altname);
+
                } else {
+
                    result_name = name;
+
                }
+
                var comma = result_name.search(';');
+
                if(comma != -1) {
+
                    result_name = result_name.replace( /;/g, " " );
+
                }
+
   
+
              names.push(result_name);
+
           
+
               
+
                ids.push(search_result_ID);
+
               
+
                getProtein(search_result_ID);
+
               
+
                var expect_value = body_split[expect+2].substring(0,body_split[expect+2].length-1);
+
               
+
                e_values.push(expect_value);
+
               
+
                var identities_value = body_split[identities+3].substring(1, body_split[identities+3].length-2);
+
           
+
                identities_arr.push(identities_value);
+
               
+
             
+
        }
+
 
     }
 
     }
      
+
     tbody.appendChild(tr_body);
 +
  }
  
setTimeout(function() {
+
  table.appendChild(thead);
        console.log(organism_match);
+
   table.appendChild(tbody);
        console.log(safety_arr);
+
   table.className = "table table-bordered mdl-shadow--4dp";
        console.log(names);
+
  div.appendChild(table);
        var functionalities_safety = [];
+
}
        console.log(functionalities.length);
+
        for(var q=0; q<functionalities.length; q++) {
+
            var pusher = [1];
+
           
+
            functionalities_safety.push(pusher);
+
        }    
+
                   
+
             
+
        console.log(functionalities);
+
        console.log(functionalities_safety);
+
        console.log(ids);
+
        console.log(e_values);
+
        console.log(identities_arr);
+
    createTable(names, organism_match, safety_arr, functionalities, functionalities_safety, ids, identities_arr, e_values, safety_onko);
+
       
+
                    }, 1000);
+
               
+
    
+
           
+
           
+
           
+
           
+
function getProtein (id) {
+
$.ajax({
+
    type: 'GET',
+
    url: 'http://www.uniprot.org/uniprot/'+id+'.txt',
+
    dataType: 'Text',
+
    async: 'false',
+
    success: function(result){
+
        console.log(result);
+
        var organism_safety = "";
+
        var _GOs = get_GOs(result);
+
       
+
        var GO_string = "";
+
        for(var x=0; x<2;x++) {
+
            GO_string = GO_string + Object.values(_GOs[x]) + ", ";
+
        }
+
        GO_string = GO_string.substring(0, GO_string.length-2);
+
     
+
        if(GO_string.charAt(GO_string.length-2) == ',') {
+
            GO_string = GO_string.substring(0, GO_string.length-2);
+
        }
+
     
+
        functionalities.push(GO_string);
+
        organism_match.push(_GOs[2][0]);
+
        organism_safety = _GOs[2][0].substring(0, _GOs[2][0].indexOf('(')-1);
+
  
        getSafety(organism_safety);
+
function safetynet_create_table(goterms) {
        getOnkogene(_GOs[3][0]);
+
  return getDatabase().then(function(db) {
    
+
    safetynet_create_table_impl(goterms, db);
       
+
   });
    },error: function (request, status, error) {
+
}
     alert(request.responseText);
+
 
 +
function safetynet_create_table_impl(goterms, database) {
 +
  var gored = "#9d1c20";
 +
  var gogreen = "#009e73";
 +
  var goredimg =
 +
      "https://static.igem.org/mediawiki/2017/thumb/d/dd/T--Heidelberg--2017_safety_red.jpg/600px-T--Heidelberg--2017_safety_red.jpg";
 +
  var gogreenimg =
 +
      "https://static.igem.org/mediawiki/2017/thumb/e/ee/T--Heidelberg--2017_safety_green.jpg/600px-T--Heidelberg--2017_safety_green.jpg";
 +
  $("#deeprotein_results").empty();
 +
  $("#deeprotein_results").id = "deeprotein_results";
 +
  var card_section = document.createElement("section");
 +
  card_section.className = "teaser content equal_height";
 +
  card_section.style = "padding-top: 100px";
 +
  var evilgos = Object.keys(database.functions);
 +
  for (let idx = 0; idx < goterms.length; ++idx) {
 +
     var isEvil = false;
 +
    for (let idy = 0; idy < evilgos.length; ++idy) {
 +
      if (goterms[idx].go === evilgos[idy]) {
 +
        isEvil = true;
 +
        break;
 +
      }
 
     }
 
     }
});
+
    var gocolor = isEvil ? gored : gogreen;
      
+
    var goevil = isEvil ? "Potentially Dangerous" : "Safe";
 +
    var goimage = document.createElement("img");
 +
    goimage.src = isEvil ? goredimg : gogreenimg;
 +
    goimage.class = "card-image";
 +
    goimage.style = "width: 100%";
 +
    var gotitle = document.createElement("h4");
 +
    gotitle.class = "card-title";
 +
    $(gotitle).text(goevil);
 +
    var gocontent = document.createElement("p");
 +
    gocontent.class = "card-content";
 +
    $(gocontent).text(goterms[idx].name);
 +
    var gobody = document.createElement("div");
 +
    gobody.class = "card-body";
 +
    gobody.appendChild(gotitle);
 +
    gobody.appendChild(gocontent);
 +
    var gocard = document.createElement("div");
 +
    gocard.className = "card";
 +
    gocard.style = "border-left: 10px solid; border-color: " + gocolor;
 +
    gocard.appendChild(goimage);
 +
    gocard.appendChild(gobody);
 +
    var gocol = document.createElement("div");
 +
    gocol.className = "col-lg-4 col-md-4 col-xs-12";
 +
    gocol.appendChild(gocard);
 +
    card_section.appendChild(gocol);
 +
  }
 +
  if (goterms.length == 0) {
 +
    var gocolor = "#222222";
 +
     var goevil = "Unknown";
 +
    var goimage = document.createElement("img");
 +
    goimage.src = gogreenimg;
 +
    goimage.class = "card-image";
 +
    goimage.style =
 +
        "width: 100%; -webkit-filter:grayscale(100%); -moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%); filter:grayscale(100%);";
 +
    var gotitle = document.createElement("h4");
 +
    gotitle.class = "card-title";
 +
    $(gotitle).text(goevil);
 +
    var gocontent = document.createElement("p");
 +
    gocontent.class = "card-content";
 +
    $(gocontent).text(
 +
        "No potentially harmful GO-terms could be inferred for this sequence.");
 +
    var gobody = document.createElement("div");
 +
    gobody.class = "card-body";
 +
    gobody.appendChild(gotitle);
 +
    gobody.appendChild(gocontent);
 +
    var gocard = document.createElement("div");
 +
    gocard.className = "card";
 +
    gocard.style = "border-left: 10px solid; border-color: " + gocolor;
 +
    gocard.appendChild(goimage);
 +
    gocard.appendChild(gobody);
 +
    var gocol = document.createElement("div");
 +
    gocol.className = "col-lg-4 col-md-4 col-xs-12";
 +
    gocol.appendChild(gocard);
 +
    card_section.appendChild(gocol);
 +
  }
 +
  $("#deep_results").append(card_section);
 
}
 
}
  
function get_GOs(result) {
+
function safetyblast_register_handlers() {
uniprot_dict_F = {};
+
  $("#fastablast").on("change", function() {
uniprot_dict_P = {};
+
     let file = $("#fastablast")[0].files[0];
curr_prot_id = "";
+
     var reader = new FileReader();
curr_GOs_F = [];
+
     reader.onload = function() {
curr_GOs_P = [];
+
      var res = this.result.replace(/ /g, "");
curr_GOs_functions = [];
+
      res = res.replace(/\t/g, "");
curr_GOs_pathways = [];
+
      if (res.indexOf(">") != -1 || res.indexOf("\n") != -1) {
organisms = [];
+
        var ressplit = res.split("\n");
onkogenes = [];
+
        res = "";
 
+
         for (let idx = 1; idx < ressplit.length; ++idx) {
var lines = result.split("\n");
+
          res += ressplit[idx];
var organism = "";
+
var onkogene = "";
+
for(var a in lines) {
+
     var fields = lines[a].split(" ").filter(function(e) {return e.trim().length > 0;});
+
     flag = fields[0];
+
     if(flag == 'DR' && fields.length >=2){
+
        var target_line = fields.slice(1,fields.length);
+
        var target_line = fields.slice(1,fields.length);
+
       
+
            if(target_line[0] == 'GO;' && target_line[2].startsWith("F")) {
+
                curr_GOs_F.push(target_line[1].slice(3, -1));
+
                var function_name = "";
+
                for(var i=2; i<target_line.length-1; i++) {
+
                    function_name += target_line[i] + " ";
+
                }
+
                curr_GOs_functions.push(function_name.slice(2, function_name.length-2));
+
            }
+
            else if(target_line[0] == 'GO;' && target_line[2].startsWith("P")) {
+
                curr_GOs_P.push(target_line[1].slice(3, -1));
+
                var pathway_name = "";
+
                for(var i=2; i<target_line.length-1; i++) {
+
                    pathway_name += target_line[i] + " ";
+
                }
+
                curr_GOs_pathways.push(pathway_name.slice(2, pathway_name.length-2));
+
            }
+
    }
+
    else if(flag == 'OS') {
+
       
+
 
+
         for(var l=1; l<fields.length; l++) {
+
            organism += fields[l] + " ";
+
 
         }
 
         }
 
+
      }
     
+
      console.log(res);
   
+
      $("#blast_sequence").val(res);
     }
+
     };
     else if(flag == 'GN') {
+
     reader.readAsText(file);
        onkogene = fields[1].substring(5, onkogene.length-1);
+
  });
     }
+
  $("#blastit").on("click", function() {
      
+
    sequence =
}
+
        $("#blast_sequence")[0].value.replace(/ /g, "").replace(/\t/g, "");
organisms.push(organism.substring(0, organism.length-2));
+
     $("#blast_status").text("Starting...");
onkogenes.push(onkogene);
+
     $("#blast_status").css("cssText", "background-color: black !important");
for(var i=0; i< curr_GOs_F.length; i++) {
+
    doSafetyQuery(sequence).then(function(result) {
  uniprot_dict_F[curr_GOs_F[i]]=curr_GOs_functions[i];
+
      let nhits = result.hits.length;
}
+
      var name = [];
for(var i=0; i< curr_GOs_P.length; i++) {
+
      var organism = [];
  uniprot_dict_P[curr_GOs_P[i]]=curr_GOs_pathways[i];
+
      var organism_safety = [];
}
+
      var functionality = [];
return [uniprot_dict_F, uniprot_dict_P, organisms, onkogenes];
+
      var functionality_safety = [];
 +
      var id = [];
 +
      var identity = [];
 +
      var e_value = [];
 +
      var onkogenes = [];
 +
      for (idx = 0; idx < nhits; ++idx) {
 +
        name.push(result.hits[idx].name);
 +
        organism.push(result.matches[idx]);
 +
        organism_safety.push(result.organisms[idx][1]);
 +
        functionality.push(result.functions[idx]);
 +
        functionality_safety.push(result.functionality_safety[idx]);
 +
        id.push(result.hits[idx].id);
 +
        identity.push(result.hits[idx].identity);
 +
        e_value.push(result.hits[idx].evalue);
 +
        onkogenes.push(result.onkogenes[idx]);
 +
      }
 +
      safetyblast_create_table(name, organism, organism_safety, functionality,
 +
                              functionality_safety, id, identity, e_value,
 +
                              onkogenes);
 +
      $("#blast_status").text("Done!");
 +
      $("#blast_status").css("cssText", "background-color: green !important");
 +
    });
 +
  });
 +
  $("#hyperreference2").one("click", function() {
 +
    rid = $("#get_sequence")[0].value;
 +
    doSafetyQueryWithRID(rid).then(function(result) {
 +
      let nhits = result.hits.length;
 +
      var name = [];
 +
      var organism = [];
 +
      var organism_safety = [];
 +
      var functionality = [];
 +
      var functionality_safety = [];
 +
      var id = [];
 +
      var identity = [];
 +
      var e_value = [];
 +
      var onkogenes = [];
 +
      for (idx = 0; idx < nhits; ++idx) {
 +
        name.push(result.hits[idx].name);
 +
        organism.push(result.matches[idx]);
 +
        organism_safety.push(result.organisms[idx][1]);
 +
        functionality.push(result.functions[idx]);
 +
        functionality_safety.push(result.functionality_safety[idx]);
 +
        id.push(result.hits[idx].id);
 +
        identity.push(result.hits[idx].identity);
 +
        e_value.push(result.hits[idx].evalue);
 +
        onkogenes.push(result.onkogenes[idx]);
 +
      }
 +
      safetyblast_create_table(name, organism, organism_safety, functionality,
 +
                              functionality_safety, id, identity, e_value,
 +
                              onkogenes);
 +
    });
 +
  });
 
}
 
}
  
   
+
function safetynet_register_handlers() {
function getSafety(blast_organism) {
+
  window.ctx = newDeeProteinContext();
     
+
  ctx.ready();
      $.getJSON('Organisms.json', function(json_organisms) {
+
  $("#download").on("click", function() {
         
+
    top.location.href =
                  if(Object.keys(json_organisms).indexOf(blast_organism) >=0 ) {
+
        "https://static.igem.org/mediawiki/2017/f/fd/T--Heidelberg--2017_DeeProteinWeights.zip";
                      var safety_values = Object.values(json_organisms[blast_organism]);
+
  });
                     
+
  $("#deepweights").on("change", function() {
                      safety_arr.push(safety_values);
+
     var status = $("#deep_status");
                     
+
     status.text("Loading Weights ...");
                  } else {
+
     var file = $("#deepweights")[0].files[0];
                     
+
    ctx.loadWeightsFromFile(file);
                      safety_arr.push(['safe', 1]);
+
  });
                  }
+
  $("#fastadeep").on("change", function() {
      });
+
    let file = $("#fastadeep")[0].files[0];
     
+
    var reader = new FileReader();
               
+
    reader.onload = function() {
  }
+
      var res = this.result.replace(/ /g, "");
   
+
      res = res.replace(/\t/g, "");
    function getOnkogene(onkogene) {
+
      if (res.indexOf(">") != -1 || res.indexOf("\n") != -1) {
        $.getJSON('Organisms.json', function(json_onkogenes) {
+
        var ressplit = res.split("\n");
         
+
        res = "";
                  if(Object.keys(json_onkogenes).indexOf(onkogene) >=0 ) {
+
        for (let idx = 1; idx < ressplit.length; ++idx) {
                      var safety_values = Object.values(json_onkogenes[onkogene]);
+
          res += ressplit[idx];
                     
+
                      safety_onko.push(safety_values);
+
                     
+
                  } else {
+
                     
+
                      safety_onko.push('No Onkogene');
+
                  }
+
      });
+
    }
+
  // Create Interactive HTML table
+
           
+
 
+
           
+
 
+
 
+
function createTable(name, organism, organism_safety, functionality, functionality_safety, id, identity, e_value, onkogenes) {
+
       
+
    var table_head = ['Name', 'Organism', 'Group', 'Functionality', 'ID', 'Identity', 'E-Value'];
+
 
+
   
+
    var div = document.getElementById('safety_table');
+
     var table = document.createElement('table');
+
     var thead = document.createElement('thead')
+
    var tbody = document.createElement('tbody');
+
       
+
     var tr_head = document.createElement('tr');
+
    for(var i=0; i<7; i++) {
+
        var td_head = document.createElement('td');
+
        td_head.append(document.createTextNode(table_head[i]));
+
        tr_head.appendChild(td_head);
+
    }
+
    thead.appendChild(tr_head);
+
 
+
 
+
    for(var j=0; j<organism.length; j++) {
+
        var table_body = [];
+
       
+
        table_body[0] = name[j];
+
        table_body[1] = organism[j];
+
        table_body[2] = organism_safety[j][0];
+
        table_body[3] = functionality[j];
+
 
+
        table_body[4] = id[j];
+
        table_body[5] = identity[j];
+
        table_body[6] = e_value[j];
+
        table_body[7] = onkogenes[j];
+
       
+
        var tr_body = document.createElement('tr');
+
        for(var k=0; k<8; k++) {
+
            var td_body = document.createElement('td');
+
           
+
           
+
           
+
            if(k==3) {
+
             
+
                var inner_func = table_body[k].split(',');
+
                for(var w=0; w<functionality[j].split(',').length; w++) {
+
                  var tr_inner = document.createElement('tr');
+
                  var td_inner = document.createElement('td');
+
                    td_inner.append(document.createTextNode(inner_func[w]));
+
                    tr_inner.appendChild(td_inner);
+
                    td_body.appendChild(tr_inner);
+
                }
+
               
+
            } else {
+
              td_body.append(document.createTextNode(table_body[k]));
+
            if(organism_safety[j][1]>1 && k==2 ) {
+
                td_body.style.backgroundColor = 'red';
+
            }
+
            else if(organism_safety[j][1]<=1 && k==2){
+
                td_body.style.backgroundColor = 'green';
+
            } else {
+
                // Nothing
+
                }
+
            }
+
           
+
           
+
           
+
           
+
            if(functionality_safety[j][0]>1 && k==3 ) {
+
                td_body.style.backgroundColor = 'red';
+
            }
+
            else if(functionality_safety[j][0]<=1 && k==3){
+
                td_body.style.backgroundColor = 'green';
+
            } else {
+
                // Nothing
+
            }
+
            tr_body.appendChild(td_body);
+
 
         }
 
         }
        tbody.appendChild(tr_body);
+
      }
     }   
+
      console.log(res);
      
+
      $("#deep_sequence").val(res);
     table.appendChild(thead);
+
     };
     table.appendChild(tbody);
+
    reader.readAsText(file);
     table.className = "table";
+
   });
     div.appendChild(table);
+
  $("#deepit").on("click", function() {
 
+
     var status = $("#deeprotein_status");
}
+
     status.text("Inferring ...");
 +
     let string = $("#deep_sequence")[0].value;
 +
    ctx.infer(string);
 +
  });
 +
  ctx.onready = function() {
 +
     var status = $("#deeprotein_status");
 +
    status.css("cssText", "background-color: black !important");
 +
    status.text("Initialized ...");
 +
  };
 +
  ctx.onloadfile = function() {
 +
    var status = $("#deep_status");
 +
     status.css("cssText", "background-color: blue !important");
 +
    status.text("Weights loaded ...")
 +
  };
 +
  ctx.oninfer = function(result) {
 +
    var status = $("#deep_status");
 +
    safetynet_create_table(result);
 +
    console.log(result);
 +
    status.css("cssText", "background-color: green !important");
 +
    status.text("Inferred!");
 +
  };
 
}
 
}
 +
 +
$(document).ready(function() {
 +
  safetyblast_register_handlers();
 +
  safetynet_register_handlers();
 +
});

Latest revision as of 21:09, 1 November 2017

function safetyblast_create_table(name, organism, organism_safety,

                                 functionality, functionality_safety, id,
                                 identity, e_value, onkogenes) {
 var table_head = [
   'Name', 'Organism', 'Group', 'Functionality', 'ID', 'Identity', 'E-Value',
   'Onkogenicity'
 ];
 var div = document.getElementById('safety_table');
 var table = document.createElement('table');
 var thead = document.createElement('thead');
 var tbody = document.createElement('tbody');
 $(div).empty();
 var tr_head = document.createElement('tr');
 for (var i = 0; i < 8; i++) {
   var td_head = document.createElement('th');
   td_head.append(document.createTextNode(table_head[i]));
   tr_head.appendChild(td_head);
 }
 thead.appendChild(tr_head);
 for (var j = 0; j < organism.length; j++) {
   var table_body = [];
   table_body[0] = name[j];
   table_body[1] = organism[j];
   table_body[2] = "S" + organism_safety[j].toString();
   table_body[3] = functionality[j];
   table_body[4] = id[j];
   table_body[5] = identity[j];
   table_body[6] = e_value[j];
   table_body[7] = onkogenes[j];
   var tr_body = document.createElement('tr');
   for (var k = 0; k < 8; k++) {
     var td_body = document.createElement('td');
     if (k == 3) {
       var inner_func = table_body[k].split(',');
       for (var w = 0; w < functionality[j].split(',').length; w++) {
         var tr_inner = document.createElement('tr');
         var td_inner = document.createElement('td');
         td_inner.append(document.createTextNode(inner_func[w]));
         tr_inner.appendChild(td_inner);
         td_body.appendChild(tr_inner);
       }
     } else {
       td_body.append(document.createTextNode(table_body[k]));
       if (organism_safety[j] > 1 && k == 2) {
         td_body.style.backgroundColor = 'red';
       } else if (organism_safety[j] <= 1 && k == 2) {
         td_body.style.backgroundColor = 'green';
       } else {
         // Nothing
       }
     }
     if (functionality_safety[j] && k == 3) {
       td_body.style.backgroundColor = 'red';
     } else if (!functionality_safety[j] && k == 3) {
       td_body.style.backgroundColor = 'green';
     } else {
       // Nothing
     }
     tr_body.appendChild(td_body);
   }
   tbody.appendChild(tr_body);
 }
 table.appendChild(thead);
 table.appendChild(tbody);
 table.className = "table table-bordered mdl-shadow--4dp";
 div.appendChild(table);

}

function safetynet_create_table(goterms) {

 return getDatabase().then(function(db) {
   safetynet_create_table_impl(goterms, db);
 });

}

function safetynet_create_table_impl(goterms, database) {

 var gored = "#9d1c20";
 var gogreen = "#009e73";
 var goredimg =
     "600px-T--Heidelberg--2017_safety_red.jpg";
 var gogreenimg =
     "600px-T--Heidelberg--2017_safety_green.jpg";
 $("#deeprotein_results").empty();
 $("#deeprotein_results").id = "deeprotein_results";
 var card_section = document.createElement("section");
 card_section.className = "teaser content equal_height";
 card_section.style = "padding-top: 100px";
 var evilgos = Object.keys(database.functions);
 for (let idx = 0; idx < goterms.length; ++idx) {
   var isEvil = false;
   for (let idy = 0; idy < evilgos.length; ++idy) {
     if (goterms[idx].go === evilgos[idy]) {
       isEvil = true;
       break;
     }
   }
   var gocolor = isEvil ? gored : gogreen;
   var goevil = isEvil ? "Potentially Dangerous" : "Safe";
   var goimage = document.createElement("img");
   goimage.src = isEvil ? goredimg : gogreenimg;
   goimage.class = "card-image";
   goimage.style = "width: 100%";
   var gotitle = document.createElement("h4");
   gotitle.class = "card-title";
   $(gotitle).text(goevil);
   var gocontent = document.createElement("p");
   gocontent.class = "card-content";
   $(gocontent).text(goterms[idx].name);
   var gobody = document.createElement("div");
   gobody.class = "card-body";
   gobody.appendChild(gotitle);
   gobody.appendChild(gocontent);
   var gocard = document.createElement("div");
   gocard.className = "card";
   gocard.style = "border-left: 10px solid; border-color: " + gocolor;
   gocard.appendChild(goimage);
   gocard.appendChild(gobody);
   var gocol = document.createElement("div");
   gocol.className = "col-lg-4 col-md-4 col-xs-12";
   gocol.appendChild(gocard);
   card_section.appendChild(gocol);
 }
 if (goterms.length == 0) {
   var gocolor = "#222222";
   var goevil = "Unknown";
   var goimage = document.createElement("img");
   goimage.src = gogreenimg;
   goimage.class = "card-image";
   goimage.style =
       "width: 100%; -webkit-filter:grayscale(100%); -moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%); filter:grayscale(100%);";
   var gotitle = document.createElement("h4");
   gotitle.class = "card-title";
   $(gotitle).text(goevil);
   var gocontent = document.createElement("p");
   gocontent.class = "card-content";
   $(gocontent).text(
       "No potentially harmful GO-terms could be inferred for this sequence.");
   var gobody = document.createElement("div");
   gobody.class = "card-body";
   gobody.appendChild(gotitle);
   gobody.appendChild(gocontent);
   var gocard = document.createElement("div");
   gocard.className = "card";
   gocard.style = "border-left: 10px solid; border-color: " + gocolor;
   gocard.appendChild(goimage);
   gocard.appendChild(gobody);
   var gocol = document.createElement("div");
   gocol.className = "col-lg-4 col-md-4 col-xs-12";
   gocol.appendChild(gocard);
   card_section.appendChild(gocol);
 }
 $("#deep_results").append(card_section);

}

function safetyblast_register_handlers() {

 $("#fastablast").on("change", function() {
   let file = $("#fastablast")[0].files[0];
   var reader = new FileReader();
   reader.onload = function() {
     var res = this.result.replace(/ /g, "");
     res = res.replace(/\t/g, "");
     if (res.indexOf(">") != -1 || res.indexOf("\n") != -1) {
       var ressplit = res.split("\n");
       res = "";
       for (let idx = 1; idx < ressplit.length; ++idx) {
         res += ressplit[idx];
       }
     }
     console.log(res);
     $("#blast_sequence").val(res);
   };
   reader.readAsText(file);
 });
 $("#blastit").on("click", function() {
   sequence =
       $("#blast_sequence")[0].value.replace(/ /g, "").replace(/\t/g, "");
   $("#blast_status").text("Starting...");
   $("#blast_status").css("cssText", "background-color: black !important");
   doSafetyQuery(sequence).then(function(result) {
     let nhits = result.hits.length;
     var name = [];
     var organism = [];
     var organism_safety = [];
     var functionality = [];
     var functionality_safety = [];
     var id = [];
     var identity = [];
     var e_value = [];
     var onkogenes = [];
     for (idx = 0; idx < nhits; ++idx) {
       name.push(result.hits[idx].name);
       organism.push(result.matches[idx]);
       organism_safety.push(result.organisms[idx][1]);
       functionality.push(result.functions[idx]);
       functionality_safety.push(result.functionality_safety[idx]);
       id.push(result.hits[idx].id);
       identity.push(result.hits[idx].identity);
       e_value.push(result.hits[idx].evalue);
       onkogenes.push(result.onkogenes[idx]);
     }
     safetyblast_create_table(name, organism, organism_safety, functionality,
                              functionality_safety, id, identity, e_value,
                              onkogenes);
     $("#blast_status").text("Done!");
     $("#blast_status").css("cssText", "background-color: green !important");
   });
 });
 $("#hyperreference2").one("click", function() {
   rid = $("#get_sequence")[0].value;
   doSafetyQueryWithRID(rid).then(function(result) {
     let nhits = result.hits.length;
     var name = [];
     var organism = [];
     var organism_safety = [];
     var functionality = [];
     var functionality_safety = [];
     var id = [];
     var identity = [];
     var e_value = [];
     var onkogenes = [];
     for (idx = 0; idx < nhits; ++idx) {
       name.push(result.hits[idx].name);
       organism.push(result.matches[idx]);
       organism_safety.push(result.organisms[idx][1]);
       functionality.push(result.functions[idx]);
       functionality_safety.push(result.functionality_safety[idx]);
       id.push(result.hits[idx].id);
       identity.push(result.hits[idx].identity);
       e_value.push(result.hits[idx].evalue);
       onkogenes.push(result.onkogenes[idx]);
     }
     safetyblast_create_table(name, organism, organism_safety, functionality,
                              functionality_safety, id, identity, e_value,
                              onkogenes);
   });
 });

}

function safetynet_register_handlers() {

 window.ctx = newDeeProteinContext();
 ctx.ready();
 $("#download").on("click", function() {
   top.location.href =
       "https://static.igem.org/mediawiki/2017/f/fd/T--Heidelberg--2017_DeeProteinWeights.zip";
 });
 $("#deepweights").on("change", function() {
   var status = $("#deep_status");
   status.text("Loading Weights ...");
   var file = $("#deepweights")[0].files[0];
   ctx.loadWeightsFromFile(file);
 });
 $("#fastadeep").on("change", function() {
   let file = $("#fastadeep")[0].files[0];
   var reader = new FileReader();
   reader.onload = function() {
     var res = this.result.replace(/ /g, "");
     res = res.replace(/\t/g, "");
     if (res.indexOf(">") != -1 || res.indexOf("\n") != -1) {
       var ressplit = res.split("\n");
       res = "";
       for (let idx = 1; idx < ressplit.length; ++idx) {
         res += ressplit[idx];
       }
     }
     console.log(res);
     $("#deep_sequence").val(res);
   };
   reader.readAsText(file);
 });
 $("#deepit").on("click", function() {
   var status = $("#deeprotein_status");
   status.text("Inferring ...");
   let string = $("#deep_sequence")[0].value;
   ctx.infer(string);
 });
 ctx.onready = function() {
   var status = $("#deeprotein_status");
   status.css("cssText", "background-color: black !important");
   status.text("Initialized ...");
 };
 ctx.onloadfile = function() {
   var status = $("#deep_status");
   status.css("cssText", "background-color: blue !important");
   status.text("Weights loaded ...")
 };
 ctx.oninfer = function(result) {
   var status = $("#deep_status");
   safetynet_create_table(result);
   console.log(result);
   status.css("cssText", "background-color: green !important");
   status.text("Inferred!");
 };

}

$(document).ready(function() {

 safetyblast_register_handlers();
 safetynet_register_handlers();

});