extensions/net.sf.basedb.reggie/trunk/resources/dnaseq-analysis/view_existing_ascat_results.js

Code
Comments
Other
Rev Date Author Line
7291 21 Aug 23 nicklas 1 var Ascat = function()
7291 21 Aug 23 nicklas 2 {
7291 21 Aug 23 nicklas 3   var ascat = {};  
7291 21 Aug 23 nicklas 4   var ascatItems;
7291 21 Aug 23 nicklas 5   
7291 21 Aug 23 nicklas 6   // Page initialization
7291 21 Aug 23 nicklas 7   ascat.initPage = function()
7291 21 Aug 23 nicklas 8   {
7291 21 Aug 23 nicklas 9     Buttons.addClickHandler('close', App.closeWindow);
7291 21 Aug 23 nicklas 10     
7291 21 Aug 23 nicklas 11     Wizard.showLoadingAnimation('Loading ASCAT results...');
7291 21 Aug 23 nicklas 12     var url = '../Ascat.servlet?ID='+App.getSessionId();
7291 21 Aug 23 nicklas 13     url += '&cmd=LoadExistingResults';
7291 21 Aug 23 nicklas 14     url += '&tumorId='+Data.get('page-data', 'tumor-id');
7291 21 Aug 23 nicklas 15     url += '&normalId='+Data.get('page-data', 'normal-id');
7291 21 Aug 23 nicklas 16     Wizard.asyncJsonRequest(url, ascat.initializeStep1);
7291 21 Aug 23 nicklas 17   }
7291 21 Aug 23 nicklas 18   
7291 21 Aug 23 nicklas 19   // --- Step 1 -----------------------------------
7291 21 Aug 23 nicklas 20   ascat.initializeStep1 = function(response)
7291 21 Aug 23 nicklas 21   {
7291 21 Aug 23 nicklas 22     ascatItems = response.ascatItems;
7291 21 Aug 23 nicklas 23     if (ascatItems.length == 0)
7291 21 Aug 23 nicklas 24     {
7291 21 Aug 23 nicklas 25       Wizard.setFatalError('No ASCAT results available for processing.');
7291 21 Aug 23 nicklas 26       return;
7291 21 Aug 23 nicklas 27     }
7291 21 Aug 23 nicklas 28     
7291 21 Aug 23 nicklas 29     var html = '<table id="ascatTable">';
7291 21 Aug 23 nicklas 30     html += '<thead class="bg-filled-100">';
7291 21 Aug 23 nicklas 31     // Header row
7291 21 Aug 23 nicklas 32     html += '<tr>';
7341 11 Sep 23 nicklas 33     html += '<th>Item</th>';
7291 21 Aug 23 nicklas 34     html += '<th class="dottedleft"></th>';
7291 21 Aug 23 nicklas 35     html += '<th class="dottedleft"></th>';
7293 22 Aug 23 nicklas 36     html += '<th class="dottedleft"></th>';
7291 21 Aug 23 nicklas 37     html += '<th class="dottedleft" colspan="3">Images</th>';
7291 21 Aug 23 nicklas 38     html += '</tr>';
7291 21 Aug 23 nicklas 39     
7291 21 Aug 23 nicklas 40     html += '<tr>';
7341 11 Sep 23 nicklas 41     html += '<th>(Comments)</th>';
7291 21 Aug 23 nicklas 42     html += '<th class="dottedleft">Parameters</th>';
7291 21 Aug 23 nicklas 43     html += '<th class="dottedleft">Results</th>';
7341 11 Sep 23 nicklas 44     html += '<th class="dottedleft">Files</th>';
7291 21 Aug 23 nicklas 45     html += '<th class="dottedleft">Sunrise plot</th>';
7291 21 Aug 23 nicklas 46     html += '<th>ASCAT profile</th>';
7291 21 Aug 23 nicklas 47     html += '<th>Segmentation plot</th>';
7291 21 Aug 23 nicklas 48     html += '</tr>';
7291 21 Aug 23 nicklas 49     html += '</thead>';
7291 21 Aug 23 nicklas 50     html += '<tbody>';
7291 21 Aug 23 nicklas 51     for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++)
7291 21 Aug 23 nicklas 52     {
7291 21 Aug 23 nicklas 53       var item = ascatItems[ascatNo];      
7291 21 Aug 23 nicklas 54       html += '<tr class="highlight ' + (ascatNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
7341 11 Sep 23 nicklas 55       html += '<td class="prompt">'+Strings.encodeTags(item.name);
7341 11 Sep 23 nicklas 56       html += '<div class="result-comments">'+Strings.encodeTags(item.comment || '(no comments)')+'</div>';
7341 11 Sep 23 nicklas 57       html += '</td>';
7291 21 Aug 23 nicklas 58       
7291 21 Aug 23 nicklas 59       // Parameters
7291 21 Aug 23 nicklas 60       html += '<td class="dottedleft">';
7291 21 Aug 23 nicklas 61       html += '<div class="smalltable">';
7341 11 Sep 23 nicklas 62       if (item.MinDepth) html += '<div>Min depth</div><div>'+Numbers.formatNumber(item.MinDepth)+'</div>';
7341 11 Sep 23 nicklas 63       if (item.Penalty) html += '<div>Penalty</div><div>'+Numbers.formatNumber(item.Penalty)+'</div>';
7341 11 Sep 23 nicklas 64       if (item.ImbalanceTest) html += '<div>Imbalance test</div><div>'+Strings.encodeTags(item.ImbalanceTest)+'</div>';
7291 21 Aug 23 nicklas 65       if (item.TauManual) html += '<div>Tau</div><div>'+Numbers.formatNumber(item.TauManual, 2)+'</div>';
7291 21 Aug 23 nicklas 66       if (item.RhoManual) html += '<div>Rho</div><div>'+Numbers.formatNumber(item.RhoManual, 2)+'</div>';
7291 21 Aug 23 nicklas 67       if (item.PsiManual) html += '<div>Psi</div><div>'+Numbers.formatNumber(item.PsiManual, 2)+'</div>';
7291 21 Aug 23 nicklas 68       html += '</div>';
7291 21 Aug 23 nicklas 69       html += '</td>';
7291 21 Aug 23 nicklas 70       
7291 21 Aug 23 nicklas 71       // Results
7291 21 Aug 23 nicklas 72       html += '<td class="dottedleft">';
7291 21 Aug 23 nicklas 73       html += '<div class="smalltable">';
7421 14 Nov 23 nicklas 74       if (item.Purity == null && item.Ploidy == null)
7341 11 Sep 23 nicklas 75       {
7421 14 Nov 23 nicklas 76         html += '<div>No solution</div>';
7341 11 Sep 23 nicklas 77       }
7421 14 Nov 23 nicklas 78       else
7314 29 Aug 23 nicklas 79       {
7421 14 Nov 23 nicklas 80         html += '<div>Purity</div><div>'+(item.Purity != null ? Numbers.formatNumber(item.Purity*100, 0, '%'):'')+'</div>';
7421 14 Nov 23 nicklas 81         html += '<div>Ploidy</div><div>'+Numbers.formatNumber(item.Ploidy, 2)+'</div>';
7421 14 Nov 23 nicklas 82         html += '<div title="Goodness of fit">GoF</div><div>'+Numbers.formatNumber(item.GoodnessOfFit, 1, '%')+'</div>';
7421 14 Nov 23 nicklas 83         html += '<div title="Normal contamination">NC</div><div>'+(item.NormalContamination != null ? Numbers.formatNumber(item.NormalContamination*100, 0, '%'):'')+'</div>';
7421 14 Nov 23 nicklas 84         if (item.NonAberrant=='Yes') 
7421 14 Nov 23 nicklas 85         {
7421 14 Nov 23 nicklas 86           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 88         if (item.AscatResult)
7421 14 Nov 23 nicklas 89         {
7421 14 Nov 23 nicklas 90           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 93       html += '</div>';
7293 22 Aug 23 nicklas 94       html += '</td>';
7291 21 Aug 23 nicklas 95       
7341 11 Sep 23 nicklas 96       html += '<td class="dottedleft">';
7341 11 Sep 23 nicklas 97       if (item.imbalanceTest)
7341 11 Sep 23 nicklas 98       {
7405 08 Nov 23 nicklas 99         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 101       if (item.stats)
7405 08 Nov 23 nicklas 102       {
7405 08 Nov 23 nicklas 103         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 105       html += '</td>';
7291 21 Aug 23 nicklas 106       html += '<td class="dottedleft">';
7291 21 Aug 23 nicklas 107       if  (item.sunrisePlot)
7291 21 Aug 23 nicklas 108       {
7295 23 Aug 23 nicklas 109         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 111       html += '</td>';
7291 21 Aug 23 nicklas 112       html += '<td>';
7291 21 Aug 23 nicklas 113       if  (item.ascatPlot)
7291 21 Aug 23 nicklas 114       {
7295 23 Aug 23 nicklas 115         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 117       html += '</td>';
7291 21 Aug 23 nicklas 118       html += '<td>';
7291 21 Aug 23 nicklas 119       if  (item.segmentationPlot)
7291 21 Aug 23 nicklas 120       {
7295 23 Aug 23 nicklas 121         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 123       html += '</td>';
7291 21 Aug 23 nicklas 124       html += '</tr>';
7291 21 Aug 23 nicklas 125     }
7291 21 Aug 23 nicklas 126     html += '</tbody>';
7291 21 Aug 23 nicklas 127     html += '</table>';
7291 21 Aug 23 nicklas 128     Doc.element('ascatItems').innerHTML = html;
7291 21 Aug 23 nicklas 129     
7291 21 Aug 23 nicklas 130     // Add click handler to plot
7291 21 Aug 23 nicklas 131     var plots = document.getElementsByClassName('plot-link');
7291 21 Aug 23 nicklas 132     for (var i = 0; i < plots.length; i++)
7291 21 Aug 23 nicklas 133     {
7291 21 Aug 23 nicklas 134       Events.addEventHandler(plots[i], 'click', ascat.plotOnClick);
7291 21 Aug 23 nicklas 135     }
7341 11 Sep 23 nicklas 136     
7341 11 Sep 23 nicklas 137     // Add click handler to tabular files
7341 11 Sep 23 nicklas 138     var tabular = document.getElementsByClassName('view-tabular');
7341 11 Sep 23 nicklas 139     for (var i = 0; i < tabular.length; i++)
7341 11 Sep 23 nicklas 140     {
7341 11 Sep 23 nicklas 141       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 145   ascat.plotOnClick = function(event)
7291 21 Aug 23 nicklas 146   {
7291 21 Aug 23 nicklas 147     var fileId = Data.get(event.currentTarget, 'file-id');
7295 23 Aug 23 nicklas 148     var width = Data.get(event.currentTarget, 'width', 900);
7295 23 Aug 23 nicklas 149     var height = Data.get(event.currentTarget, 'height', 600);
7291 21 Aug 23 nicklas 150     var controller = Items.getController('FILE');
7291 21 Aug 23 nicklas 151     var url = App.getRoot() + controller.url;
7291 21 Aug 23 nicklas 152     url += '?ID='+App.getSessionId();
7291 21 Aug 23 nicklas 153     url += '&cmd=ViewFile&item_id='+fileId;
7295 23 Aug 23 nicklas 154     Dialogs.openPopup(url, 'AscatPlot'+fileId, width, height);
7291 21 Aug 23 nicklas 155   }
7341 11 Sep 23 nicklas 156   
7341 11 Sep 23 nicklas 157   ascat.viewTabular = function(event)
7341 11 Sep 23 nicklas 158   {
7341 11 Sep 23 nicklas 159     var fileId = Data.int(event.currentTarget, 'file-id');
7341 11 Sep 23 nicklas 160     var width = Data.get(event.currentTarget, 'width', 900);
7341 11 Sep 23 nicklas 161     var height = Data.get(event.currentTarget, 'height', 600);
7341 11 Sep 23 nicklas 162     var url = '../Session.servlet?ID=' + App.getSessionId();
7341 11 Sep 23 nicklas 163     url += '&cmd=ViewTabular';
7341 11 Sep 23 nicklas 164     url += '&fileId='+fileId;
7341 11 Sep 23 nicklas 165     Dialogs.openPopup(url, 'ViewTabular'+fileId, width, height);
7341 11 Sep 23 nicklas 166   }
7291 21 Aug 23 nicklas 167
7291 21 Aug 23 nicklas 168   return ascat;
7291 21 Aug 23 nicklas 169 }();
7291 21 Aug 23 nicklas 170
7291 21 Aug 23 nicklas 171 Doc.onLoad(Ascat.initPage);
7291 21 Aug 23 nicklas 172