7291 |
21 Aug 23 |
nicklas |
var Ascat = function() |
7291 |
21 Aug 23 |
nicklas |
2 |
{ |
7291 |
21 Aug 23 |
nicklas |
var ascat = {}; |
7291 |
21 Aug 23 |
nicklas |
var ascatItems; |
7291 |
21 Aug 23 |
nicklas |
5 |
|
7291 |
21 Aug 23 |
nicklas |
// Page initialization |
7291 |
21 Aug 23 |
nicklas |
ascat.initPage = function() |
7291 |
21 Aug 23 |
nicklas |
8 |
{ |
7291 |
21 Aug 23 |
nicklas |
Buttons.addClickHandler('close', App.closeWindow); |
7291 |
21 Aug 23 |
nicklas |
10 |
|
7291 |
21 Aug 23 |
nicklas |
Wizard.showLoadingAnimation('Loading ASCAT results...'); |
7291 |
21 Aug 23 |
nicklas |
var url = '../Ascat.servlet?ID='+App.getSessionId(); |
7291 |
21 Aug 23 |
nicklas |
url += '&cmd=LoadExistingResults'; |
7291 |
21 Aug 23 |
nicklas |
url += '&tumorId='+Data.get('page-data', 'tumor-id'); |
7291 |
21 Aug 23 |
nicklas |
url += '&normalId='+Data.get('page-data', 'normal-id'); |
7291 |
21 Aug 23 |
nicklas |
Wizard.asyncJsonRequest(url, ascat.initializeStep1); |
7291 |
21 Aug 23 |
nicklas |
17 |
} |
7291 |
21 Aug 23 |
nicklas |
18 |
|
7291 |
21 Aug 23 |
nicklas |
// --- Step 1 ----------------------------------- |
7291 |
21 Aug 23 |
nicklas |
ascat.initializeStep1 = function(response) |
7291 |
21 Aug 23 |
nicklas |
21 |
{ |
7291 |
21 Aug 23 |
nicklas |
ascatItems = response.ascatItems; |
7291 |
21 Aug 23 |
nicklas |
if (ascatItems.length == 0) |
7291 |
21 Aug 23 |
nicklas |
24 |
{ |
7291 |
21 Aug 23 |
nicklas |
Wizard.setFatalError('No ASCAT results available for processing.'); |
7291 |
21 Aug 23 |
nicklas |
return; |
7291 |
21 Aug 23 |
nicklas |
27 |
} |
7291 |
21 Aug 23 |
nicklas |
28 |
|
7291 |
21 Aug 23 |
nicklas |
var html = '<table id="ascatTable">'; |
7291 |
21 Aug 23 |
nicklas |
html += '<thead class="bg-filled-100">'; |
7291 |
21 Aug 23 |
nicklas |
// Header row |
7291 |
21 Aug 23 |
nicklas |
html += '<tr>'; |
7341 |
11 Sep 23 |
nicklas |
html += '<th>Item</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft"></th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft"></th>'; |
7293 |
22 Aug 23 |
nicklas |
html += '<th class="dottedleft"></th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft" colspan="3">Images</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</tr>'; |
7291 |
21 Aug 23 |
nicklas |
39 |
|
7291 |
21 Aug 23 |
nicklas |
html += '<tr>'; |
7341 |
11 Sep 23 |
nicklas |
html += '<th>(Comments)</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft">Parameters</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft">Results</th>'; |
7341 |
11 Sep 23 |
nicklas |
html += '<th class="dottedleft">Files</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th class="dottedleft">Sunrise plot</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th>ASCAT profile</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<th>Segmentation plot</th>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</tr>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</thead>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<tbody>'; |
7291 |
21 Aug 23 |
nicklas |
for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++) |
7291 |
21 Aug 23 |
nicklas |
52 |
{ |
7291 |
21 Aug 23 |
nicklas |
var item = ascatItems[ascatNo]; |
7291 |
21 Aug 23 |
nicklas |
html += '<tr class="highlight ' + (ascatNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">'; |
7341 |
11 Sep 23 |
nicklas |
html += '<td class="prompt">'+Strings.encodeTags(item.name); |
7341 |
11 Sep 23 |
nicklas |
html += '<div class="result-comments">'+Strings.encodeTags(item.comment || '(no comments)')+'</div>'; |
7341 |
11 Sep 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
58 |
|
7291 |
21 Aug 23 |
nicklas |
// Parameters |
7291 |
21 Aug 23 |
nicklas |
html += '<td class="dottedleft">'; |
7291 |
21 Aug 23 |
nicklas |
html += '<div class="smalltable">'; |
7341 |
11 Sep 23 |
nicklas |
if (item.MinDepth) html += '<div>Min depth</div><div>'+Numbers.formatNumber(item.MinDepth)+'</div>'; |
7341 |
11 Sep 23 |
nicklas |
if (item.Penalty) html += '<div>Penalty</div><div>'+Numbers.formatNumber(item.Penalty)+'</div>'; |
7341 |
11 Sep 23 |
nicklas |
if (item.ImbalanceTest) html += '<div>Imbalance test</div><div>'+Strings.encodeTags(item.ImbalanceTest)+'</div>'; |
7291 |
21 Aug 23 |
nicklas |
if (item.TauManual) html += '<div>Tau</div><div>'+Numbers.formatNumber(item.TauManual, 2)+'</div>'; |
7291 |
21 Aug 23 |
nicklas |
if (item.RhoManual) html += '<div>Rho</div><div>'+Numbers.formatNumber(item.RhoManual, 2)+'</div>'; |
7291 |
21 Aug 23 |
nicklas |
if (item.PsiManual) html += '<div>Psi</div><div>'+Numbers.formatNumber(item.PsiManual, 2)+'</div>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</div>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
70 |
|
7291 |
21 Aug 23 |
nicklas |
// Results |
7291 |
21 Aug 23 |
nicklas |
html += '<td class="dottedleft">'; |
7291 |
21 Aug 23 |
nicklas |
html += '<div class="smalltable">'; |
7421 |
14 Nov 23 |
nicklas |
if (item.Purity == null && item.Ploidy == null) |
7341 |
11 Sep 23 |
nicklas |
75 |
{ |
7421 |
14 Nov 23 |
nicklas |
html += '<div>No solution</div>'; |
7341 |
11 Sep 23 |
nicklas |
77 |
} |
7421 |
14 Nov 23 |
nicklas |
else |
7314 |
29 Aug 23 |
nicklas |
79 |
{ |
7421 |
14 Nov 23 |
nicklas |
html += '<div>Purity</div><div>'+(item.Purity != null ? Numbers.formatNumber(item.Purity*100, 0, '%'):'')+'</div>'; |
7421 |
14 Nov 23 |
nicklas |
html += '<div>Ploidy</div><div>'+Numbers.formatNumber(item.Ploidy, 2)+'</div>'; |
7421 |
14 Nov 23 |
nicklas |
html += '<div title="Goodness of fit">GoF</div><div>'+Numbers.formatNumber(item.GoodnessOfFit, 1, '%')+'</div>'; |
7421 |
14 Nov 23 |
nicklas |
html += '<div title="Normal contamination">NC</div><div>'+(item.NormalContamination != null ? Numbers.formatNumber(item.NormalContamination*100, 0, '%'):'')+'</div>'; |
7421 |
14 Nov 23 |
nicklas |
if (item.NonAberrant=='Yes') |
7421 |
14 Nov 23 |
nicklas |
85 |
{ |
7421 |
14 Nov 23 |
nicklas |
html += '<div style="grid-column-start: 1; grid-column-end: 3;">Non-aberrant</div>'; |
7421 |
14 Nov 23 |
nicklas |
87 |
} |
7421 |
14 Nov 23 |
nicklas |
if (item.AscatResult) |
7421 |
14 Nov 23 |
nicklas |
89 |
{ |
7421 |
14 Nov 23 |
nicklas |
html += '<div class="ascat-result bg-filled-100">'+Strings.encodeTags(item.AscatResult)+'</div>'; |
7421 |
14 Nov 23 |
nicklas |
91 |
} |
7314 |
29 Aug 23 |
nicklas |
92 |
} |
7291 |
21 Aug 23 |
nicklas |
html += '</div>'; |
7293 |
22 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
95 |
|
7341 |
11 Sep 23 |
nicklas |
html += '<td class="dottedleft">'; |
7341 |
11 Sep 23 |
nicklas |
if (item.imbalanceTest) |
7341 |
11 Sep 23 |
nicklas |
98 |
{ |
7405 |
08 Nov 23 |
nicklas |
html += '<span class="link view-tabular" data-file-id="'+item.imbalanceTest.id+'" data-width="600" data-height="800" title="View allelic imbalance test scores"><img src="../images/report.png"></span>'; |
7341 |
11 Sep 23 |
nicklas |
100 |
} |
7405 |
08 Nov 23 |
nicklas |
if (item.stats) |
7405 |
08 Nov 23 |
nicklas |
102 |
{ |
7405 |
08 Nov 23 |
nicklas |
html += '<span class="link view-tabular" data-file-id="'+item.stats.id+'" data-width="600" data-height="800" title="View more metrics"><img src="../images/metrics.png"></span>'; |
7405 |
08 Nov 23 |
nicklas |
104 |
} |
7293 |
22 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<td class="dottedleft">'; |
7291 |
21 Aug 23 |
nicklas |
if (item.sunrisePlot) |
7291 |
21 Aug 23 |
nicklas |
108 |
{ |
7295 |
23 Aug 23 |
nicklas |
html += '<img class="link plot-link" data-file-id="'+item.sunrisePlot.id+'" data-width="800" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.sunrisePlot.id+'&size=MEDIUM">'; |
7291 |
21 Aug 23 |
nicklas |
110 |
} |
7291 |
21 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<td>'; |
7291 |
21 Aug 23 |
nicklas |
if (item.ascatPlot) |
7291 |
21 Aug 23 |
nicklas |
114 |
{ |
7295 |
23 Aug 23 |
nicklas |
html += '<img class="link plot-link" data-file-id="'+item.ascatPlot.id+'" data-width="1500" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.ascatPlot.id+'&size=XLARGE">'; |
7291 |
21 Aug 23 |
nicklas |
116 |
} |
7291 |
21 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
html += '<td>'; |
7291 |
21 Aug 23 |
nicklas |
if (item.segmentationPlot) |
7291 |
21 Aug 23 |
nicklas |
120 |
{ |
7295 |
23 Aug 23 |
nicklas |
html += '<img class="link plot-link" data-file-id="'+item.segmentationPlot.id+'" data-width="1200" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.segmentationPlot.id+'&size=LARGE">'; |
7291 |
21 Aug 23 |
nicklas |
122 |
} |
7291 |
21 Aug 23 |
nicklas |
html += '</td>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</tr>'; |
7291 |
21 Aug 23 |
nicklas |
125 |
} |
7291 |
21 Aug 23 |
nicklas |
html += '</tbody>'; |
7291 |
21 Aug 23 |
nicklas |
html += '</table>'; |
7291 |
21 Aug 23 |
nicklas |
Doc.element('ascatItems').innerHTML = html; |
7291 |
21 Aug 23 |
nicklas |
129 |
|
7291 |
21 Aug 23 |
nicklas |
// Add click handler to plot |
7291 |
21 Aug 23 |
nicklas |
var plots = document.getElementsByClassName('plot-link'); |
7291 |
21 Aug 23 |
nicklas |
for (var i = 0; i < plots.length; i++) |
7291 |
21 Aug 23 |
nicklas |
133 |
{ |
7291 |
21 Aug 23 |
nicklas |
Events.addEventHandler(plots[i], 'click', ascat.plotOnClick); |
7291 |
21 Aug 23 |
nicklas |
135 |
} |
7341 |
11 Sep 23 |
nicklas |
136 |
|
7341 |
11 Sep 23 |
nicklas |
// Add click handler to tabular files |
7341 |
11 Sep 23 |
nicklas |
var tabular = document.getElementsByClassName('view-tabular'); |
7341 |
11 Sep 23 |
nicklas |
for (var i = 0; i < tabular.length; i++) |
7341 |
11 Sep 23 |
nicklas |
140 |
{ |
7341 |
11 Sep 23 |
nicklas |
Events.addEventHandler(tabular[i], 'click', ascat.viewTabular); |
7341 |
11 Sep 23 |
nicklas |
142 |
} |
7291 |
21 Aug 23 |
nicklas |
143 |
} |
7291 |
21 Aug 23 |
nicklas |
144 |
|
7291 |
21 Aug 23 |
nicklas |
ascat.plotOnClick = function(event) |
7291 |
21 Aug 23 |
nicklas |
146 |
{ |
7291 |
21 Aug 23 |
nicklas |
var fileId = Data.get(event.currentTarget, 'file-id'); |
7295 |
23 Aug 23 |
nicklas |
var width = Data.get(event.currentTarget, 'width', 900); |
7295 |
23 Aug 23 |
nicklas |
var height = Data.get(event.currentTarget, 'height', 600); |
7291 |
21 Aug 23 |
nicklas |
var controller = Items.getController('FILE'); |
7291 |
21 Aug 23 |
nicklas |
var url = App.getRoot() + controller.url; |
7291 |
21 Aug 23 |
nicklas |
url += '?ID='+App.getSessionId(); |
7291 |
21 Aug 23 |
nicklas |
url += '&cmd=ViewFile&item_id='+fileId; |
7295 |
23 Aug 23 |
nicklas |
Dialogs.openPopup(url, 'AscatPlot'+fileId, width, height); |
7291 |
21 Aug 23 |
nicklas |
155 |
} |
7341 |
11 Sep 23 |
nicklas |
156 |
|
7341 |
11 Sep 23 |
nicklas |
ascat.viewTabular = function(event) |
7341 |
11 Sep 23 |
nicklas |
158 |
{ |
7341 |
11 Sep 23 |
nicklas |
var fileId = Data.int(event.currentTarget, 'file-id'); |
7341 |
11 Sep 23 |
nicklas |
var width = Data.get(event.currentTarget, 'width', 900); |
7341 |
11 Sep 23 |
nicklas |
var height = Data.get(event.currentTarget, 'height', 600); |
7341 |
11 Sep 23 |
nicklas |
var url = '../Session.servlet?ID=' + App.getSessionId(); |
7341 |
11 Sep 23 |
nicklas |
url += '&cmd=ViewTabular'; |
7341 |
11 Sep 23 |
nicklas |
url += '&fileId='+fileId; |
7341 |
11 Sep 23 |
nicklas |
Dialogs.openPopup(url, 'ViewTabular'+fileId, width, height); |
7341 |
11 Sep 23 |
nicklas |
166 |
} |
7291 |
21 Aug 23 |
nicklas |
167 |
|
7291 |
21 Aug 23 |
nicklas |
return ascat; |
7291 |
21 Aug 23 |
nicklas |
169 |
}(); |
7291 |
21 Aug 23 |
nicklas |
170 |
|
7291 |
21 Aug 23 |
nicklas |
Doc.onLoad(Ascat.initPage); |
7291 |
21 Aug 23 |
nicklas |
172 |
|