/**
* Starting point of building proteins page.
* Gets the data of all the proteins and shows on the html
* @param {String} folderName - Provides the path to the data folder.
* Provides path which helps to navigate to protein and prsm pages.
*/
function allProteins(folderName)
{
console.log("Foldername : ", folderName);
var l_proteins = prsm_data ;
var count = 1 ;
// get the div container
let div = document.getElementsByClassName("container")[0];
let h2 = document.createElement('h2');
// Check to see if protein variable inside l_proteins is an array.
// Checks for multiple proteins
if(Array.isArray(l_proteins.protein_list.proteins.protein)){
count = l_proteins.protein_list.proteins.protein.length ;
document.title = count + " proteins are identified" ;
h2.innerHTML = count + " proteins are identified." ;
}
else
{
document.title = count + " protein is identified" ;
h2.innerHTML = count + " protein is identified." ;
}
let br = document.createElement('br');
// create header with protein count
div.appendChild(h2);
div.appendChild(br);
// Creating ordered list
let ol = document.createElement('ol');
// get the best prsm for each protein and form unique links for all the proteins
// Check to see if protein variable inside l_proteins is an array.
if(Array.isArray(l_proteins.protein_list.proteins.protein))
{
l_proteins.protein_list.proteins.protein.forEach(function(protein,index){
let div_temp = proteinToHtml(protein,folderName);
let p = getBestPrsm(protein,folderName);
let br1 = document.createElement('br');
div_temp.appendChild(p);
div_temp.appendChild(br1);
ol.appendChild(div_temp);
})
}
else
{
let protein = l_proteins.protein_list.proteins.protein ;
let div_temp = proteinToHtml(protein,folderName);
let p = getBestPrsm(protein,folderName);
let br1 = document.createElement('br');
div_temp.appendChild(p);
div_temp.appendChild(br1);
ol.appendChild(div_temp);
}
div.appendChild(ol);
}
/**
* convert the json protein data into HTML and create links for each protein to navigate
* @param {object} protein - Contains data of a single protein
* @param {String} folderName - Provides path to build navigation links
*/
function proteinToHtml(protein,folderName)
{
let div = document.createElement('li');
let id = "p"+ protein.sequence_id ;
div.setAttribute("id",id);
let p = document.createElement('p');
p.setAttribute("style", "font-size:16px;");
let a = document.createElement('a');
a.href = "protein"+".html" + "?folder="+folderName+"&protein="+ protein.sequence_id;
a.innerHTML = protein.sequence_name +" "+protein.sequence_description ;
p.appendChild(a);
div.appendChild(p);
return div ;
}
/**
* Get the beat PrSM based on the PrSM e value and create link to navigate for the best PrSM
* @param {object} protein - Contains data of a single protein
* @param {String} folderName - Provides path to build navigation links
*/
function getBestPrsm(protein,folderName)
{
let best_e_value = 100;
let prsm_id = "" ;
let proteoform_count = protein.compatible_proteoform.length;
// Checking to see if it has multiple proteoforms
if(proteoform_count > 1)
{
protein.compatible_proteoform.forEach(function(proteoform,index){
// Call to get the best prsm based on e_value
[best_e_value,prsm_id] = proteoformMultirow(proteoform,best_e_value,prsm_id);
})
}
else
{
[best_e_value,prsm_id] = proteoformMultirow(protein.compatible_proteoform,best_e_value,prsm_id);
}
let p = document.createElement('p');
p.setAttribute("style", "font-size:16px;");
let text1 = document.createElement("text");
text1.innerHTML = "The ";
p.appendChild(text1) ;
let a = document.createElement('a');
a.href = "prsm.html?folder="+folderName+"&"+"prsm_id="+prsm_id ;
a.innerHTML = "best PrSM ";
p.appendChild(a);
let text2 = document.createElement("text");
let val = "has an E-value "+best_e_value+". There";
if(proteoform_count > 1)
{
val = val + " are "+proteoform_count + " proteoforms."
}
else
{
val = val + " is 1 proteoform."
}
text2.innerHTML = val ;
p.appendChild(text2);
return p;
}
/**
* Get the best prsm e value and prsm Id by looping through the proteoform array
* @param {object} proteoform - Proteoform is an object with information about a particular proteoform
* @param {Float} best_e_value - This contains a constant fixed higher value for comparison with e values of each prsm
* @param {String} prsm_id - Contains an empty string, return back id of best prsm
*/
function proteoformMultirow(proteoform, best_e_value, prsm_id)
{
let l_best_e_value = best_e_value ;
let l_prsm_id = prsm_id ;
if(proteoform.prsm.length > 1)
{
proteoform.prsm.forEach(function(prsm,index){
if(parseFloat(l_best_e_value) < parseFloat(prsm.e_value))
{
l_best_e_value = l_best_e_value ;
l_prsm_id = l_prsm_id ;
}
else
{
l_best_e_value = prsm.e_value ;
l_prsm_id = prsm.prsm_id ;
}
})
}
else
{
if(parseFloat(l_best_e_value) < parseFloat(proteoform.prsm.e_value))
{
l_best_e_value = l_best_e_value ;
l_prsm_id = l_prsm_id ;
}
else
{
l_best_e_value = proteoform.prsm.e_value ;
l_prsm_id = proteoform.prsm.prsm_id ;
}
}
return [l_best_e_value,l_prsm_id] ;
}