(Added Relative Frequency Algorithm) |
|||
| Line 313: | Line 313: | ||
{ | { | ||
var codonRank = document.getElementById('codonRank'); | var codonRank = document.getElementById('codonRank'); | ||
| − | + | var tableText = '<tr><th>Amino Acid</th><th>Codon</th><th>Codon Usage: ' + sourceOrganismData.speciesName + ' (‰)</th><th>Codon Usage: ' + destOrganismData.speciesName + ' (‰)</th><th>Residue: ' + sourceOrganismData.speciesName + ' (%)</th><th>Residue: ' + destOrganismData.speciesName + ' %</th></tr>'; | |
nbCodonsSrc = sourceOrganismData.nbCodons; | nbCodonsSrc = sourceOrganismData.nbCodons; | ||
nbCodonsDest = destOrganismData.nbCodons; | nbCodonsDest = destOrganismData.nbCodons; | ||
for (aa in sourceOrganismData.AminoAcids) | for (aa in sourceOrganismData.AminoAcids) | ||
{ | { | ||
| − | + | var srcSumOverAcid = 0; | |
| + | var destSumOverAcid = 0; | ||
| + | var srcAARelFreq = {}; | ||
| + | var destAARelFreq = {}; | ||
for (cod in sourceOrganismData.AminoAcids[aa]) | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
{ | { | ||
| − | + | srcSumOverAcid += sourceOrganismData.AminoAcids[aa][cod]; | |
| + | destSumOverAcid += destOrganismData.AminoAcids[aa][cod]; | ||
} | } | ||
| − | tableText = tableText + '</td><td>' | + | |
| + | tableText = tableText + '<tr><td>' + aa + '</td><td>'; | ||
| + | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
| + | { | ||
| + | tableText = tableText + cod + '<br>'; | ||
| + | } | ||
| + | tableText = tableText + '</td><td>' | ||
| + | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
| + | { | ||
| + | tableText = tableText + (1000*sourceOrganismData.AminoAcids[aa][cod]/nbCodonsSrc).toFixed(2)+ '<br>'; | ||
| + | } | ||
| + | tableText = tableText + '</td><td>' | ||
| + | for (cod in destOrganismData.AminoAcids[aa]) | ||
| + | { | ||
| + | tableText = tableText + (1000*destOrganismData.AminoAcids[aa][cod]/nbCodonsDest).toFixed(2)+ '<br>'; | ||
| + | } | ||
| + | tableText = tableText + '</td><td>' | ||
for (cod in sourceOrganismData.AminoAcids[aa]) | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
{ | { | ||
| − | tableText = tableText + ( | + | tableText = tableText + (100*sourceOrganismData.AminoAcids[aa][cod]/srcSumOverAcid).toFixed(2)+ '<br>'; |
} | } | ||
tableText = tableText + '</td><td>' | tableText = tableText + '</td><td>' | ||
for (cod in destOrganismData.AminoAcids[aa]) | for (cod in destOrganismData.AminoAcids[aa]) | ||
{ | { | ||
| − | tableText = tableText + ( | + | tableText = tableText + (100*destOrganismData.AminoAcids[aa][cod]/destSumOverAcid).toFixed(2)+ '<br>'; |
} | } | ||
| − | + | tableText = tableText + '</td></tr>' | |
} | } | ||
codonRank.innerHTML = tableText; | codonRank.innerHTML = tableText; | ||
| Line 342: | Line 362: | ||
var srcRanks = {}; | var srcRanks = {}; | ||
var dstRanks = {}; | var dstRanks = {}; | ||
| + | var srcRelFreq = {}; | ||
| + | var destRelFreq = {}; | ||
amAcids = ''; | amAcids = ''; | ||
var inputsequence = document.getElementById('inputsequence').value; | var inputsequence = document.getElementById('inputsequence').value; | ||
| Line 357: | Line 379: | ||
for (aa in sourceOrganismData.AminoAcids) | for (aa in sourceOrganismData.AminoAcids) | ||
{ | { | ||
| + | var srcSumOverAcid = 0; | ||
| + | var destSumOverAcid = 0; | ||
| + | var srcAARelFreq = {}; | ||
| + | var destAARelFreq = {}; | ||
| + | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
| + | { | ||
| + | srcSumOverAcid += sourceOrganismData.AminoAcids[aa][cod]; | ||
| + | destSumOverAcid += destOrganismData.AminoAcids[aa][cod]; | ||
| + | } | ||
srcAmRanks = []; | srcAmRanks = []; | ||
dstAmRanks = []; | dstAmRanks = []; | ||
for (cod in sourceOrganismData.AminoAcids[aa]) | for (cod in sourceOrganismData.AminoAcids[aa]) | ||
{ | { | ||
| + | srcAARelFreq[cod] = sourceOrganismData.AminoAcids[aa][cod]/srcSumOverAcid; | ||
| + | destAARelFreq[cod] = destOrganismData.AminoAcids[aa][cod]/destSumOverAcid; | ||
srcAmRanks.push([cod, 1000*sourceOrganismData.AminoAcids[aa][cod]/sourceOrganismData.nbCodons]); | srcAmRanks.push([cod, 1000*sourceOrganismData.AminoAcids[aa][cod]/sourceOrganismData.nbCodons]); | ||
dstAmRanks.push([cod, 1000*destOrganismData.AminoAcids[aa][cod]/destOrganismData.nbCodons]); | dstAmRanks.push([cod, 1000*destOrganismData.AminoAcids[aa][cod]/destOrganismData.nbCodons]); | ||
| Line 369: | Line 402: | ||
return a[1] - b[1]}); | return a[1] - b[1]}); | ||
srcRanks[aa] = srcAmRanks; | srcRanks[aa] = srcAmRanks; | ||
| − | dstRanks[aa] = dstAmRanks; | + | dstRanks[aa] = dstAmRanks; |
| + | srcRelFreq[aa] = srcAARelFreq; | ||
| + | destRelFreq[aa] = destAARelFreq; | ||
} | } | ||
outputSequence = ''; | outputSequence = ''; | ||
optimisedSequence = ''; | optimisedSequence = ''; | ||
freqHarmonised = ''; | freqHarmonised = ''; | ||
| + | relFreqHarmonised = ''; | ||
var cutoffValue = parseInt(document.getElementById('cutoff').value); | var cutoffValue = parseInt(document.getElementById('cutoff').value); | ||
for (var i = 0; i < inputsequence.length; i+=3) | for (var i = 0; i < inputsequence.length; i+=3) | ||
| Line 381: | Line 417: | ||
var codIdx; | var codIdx; | ||
var nearestIdx; | var nearestIdx; | ||
| + | var nearestIdxRel; | ||
for (aa in sourceOrganismData.AminoAcids) | for (aa in sourceOrganismData.AminoAcids) | ||
{ | { | ||
| + | for (cod in srcRelFreq[aa]) | ||
| + | { | ||
| + | if (cod == activeCodon) | ||
| + | { | ||
| + | var nearest = 99; | ||
| + | for (relCod in destRelFreq[aa]) | ||
| + | { | ||
| + | var diff = Math.abs(srcRelFreq[aa][cod] - destRelFreq[aa][relCod]); | ||
| + | if (diff < nearest) | ||
| + | { | ||
| + | nearestIdxRel = relCod; | ||
| + | nearest = diff; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
for (codIdx = 0; codIdx < srcRanks[aa].length; codIdx++) | for (codIdx = 0; codIdx < srcRanks[aa].length; codIdx++) | ||
{ | { | ||
| Line 431: | Line 484: | ||
freqHarmonised += dstRanks[aa][nearestIdx][0]; | freqHarmonised += dstRanks[aa][nearestIdx][0]; | ||
| + | if (nearestIdxRel != activeCodon) | ||
| + | relFreqHarmonised += codonIsDifferentPrefix + nearestIdxRel + codonIsDifferentSuffix; | ||
| + | else | ||
| + | relFreqHarmonised += nearestIdxRel; | ||
if (dstRanks[aa][dstRanks[aa].length - 1][0] != srcRanks[aa][codIdx][0]) | if (dstRanks[aa][dstRanks[aa].length - 1][0] != srcRanks[aa][codIdx][0]) | ||
| Line 456: | Line 513: | ||
acidshtml.innerHTML = '<b>Polypeptide: </b><span class="c"> ' + amAcids + '</span>'; | acidshtml.innerHTML = '<b>Polypeptide: </b><span class="c"> ' + amAcids + '</span>'; | ||
var output = document.getElementById('Output'); | var output = document.getElementById('Output'); | ||
| − | output.innerHTML = '<tr><td><b>Input Sequence:</b></td><td colspan=2 style="word-wrap: break-word"><span class="c">' + inputsequence + '</span></td></tr>'+ '<tr><td><b>Output Sequence (Optimisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + optimisedSequence + '</span></td><tr><td><b>Output Sequence (Rank Harmonisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + outputSequence + '</span></td><tr><td><b>Output Sequence (Frequency Harmonisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + freqHarmonised + '</span></td></tr>'; | + | output.innerHTML = '<tr><td><b>Input Sequence:</b></td><td colspan=2 style="word-wrap: break-word"><span class="c">' + inputsequence + '</span></td></tr>'+ '<tr><td><b>Output Sequence (Optimisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + optimisedSequence + '</span></td><tr><td><b>Output Sequence (Rank Harmonisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + outputSequence + '</span></td><tr><td><b>Output Sequence (Frequency Harmonisation)</td><td colspan=2 style="word-wrap: break-word"><span class="c">' + freqHarmonised + '</span></td><td></tr><td><b>Output sequency (Relative Frequency Harmonisation)</td><td colspan=2 style="word-warp: break-word"><span class="c">' + relFreqHarmonised + '</td></tr>'; |
Revision as of 03:43, 20 October 2019
Software
Codonator 3000
Enter your gene sequence:
Search source organism
Search destination organism
Set minimum codon frequency threshold per thousand