extensions/net.sf.basedb.reggie/trunk/resources/analysis/cufflinks_confirm.js

Code
Comments
Other
Rev Date Author Line
2826 16 Oct 14 nicklas 1 var Cufflinks = function()
2826 16 Oct 14 nicklas 2 {
2826 16 Oct 14 nicklas 3   var cufflinks = {};
2853 23 Oct 14 nicklas 4   var debug = 0;
2826 16 Oct 14 nicklas 5   
2826 16 Oct 14 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
2826 16 Oct 14 nicklas 7   var rawBioAssays;
2826 16 Oct 14 nicklas 8   
2826 16 Oct 14 nicklas 9   // Page initialization
2826 16 Oct 14 nicklas 10   cufflinks.initPage = function()
2826 16 Oct 14 nicklas 11   {
2826 16 Oct 14 nicklas 12     
2826 16 Oct 14 nicklas 13     // Step 1
2826 16 Oct 14 nicklas 14
2826 16 Oct 14 nicklas 15     // Navigation
2826 16 Oct 14 nicklas 16     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2826 16 Oct 14 nicklas 17     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2826 16 Oct 14 nicklas 18     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2826 16 Oct 14 nicklas 19     Buttons.addClickHandler('goregister', Wizard.goRegister);
2826 16 Oct 14 nicklas 20       
2826 16 Oct 14 nicklas 21     // Final registration
2826 16 Oct 14 nicklas 22     Events.addEventHandler('wizard', 'wizard-submit', cufflinks.submit);
2826 16 Oct 14 nicklas 23
2826 16 Oct 14 nicklas 24     Wizard.showLoadingAnimation('Loading bioassays...');
2826 16 Oct 14 nicklas 25     var url = '../Cufflinks.servlet?ID='+App.getSessionId();
2826 16 Oct 14 nicklas 26     url += '&cmd=GetUnconfirmed';
2826 16 Oct 14 nicklas 27     Wizard.asyncJsonRequest(url, cufflinks.initializeStep1);
2826 16 Oct 14 nicklas 28   }
2826 16 Oct 14 nicklas 29   
2826 16 Oct 14 nicklas 30   // --- Step 1 -----------------------------------
2826 16 Oct 14 nicklas 31   cufflinks.initializeStep1 = function(response)
2826 16 Oct 14 nicklas 32   {
2826 16 Oct 14 nicklas 33     rawBioAssays = response.rawBioAssays;
2826 16 Oct 14 nicklas 34     if (rawBioAssays.length == 0)
2826 16 Oct 14 nicklas 35     {
2826 16 Oct 14 nicklas 36       Wizard.setFatalError('No raw bioassays available for processing.');
2826 16 Oct 14 nicklas 37       return;
2826 16 Oct 14 nicklas 38     }
2826 16 Oct 14 nicklas 39     
2826 16 Oct 14 nicklas 40     var html = '<table id="rawBioAssaysTable">';
3026 11 Dec 14 nicklas 41     html += '<thead class="bg-filled-100">';
2826 16 Oct 14 nicklas 42     // Header row
2826 16 Oct 14 nicklas 43     html += '<tr>';
2826 16 Oct 14 nicklas 44     html += '<th></th>';
2826 16 Oct 14 nicklas 45     html += '<th class="dottedleft"></th>';
4542 26 Jun 17 nicklas 46     html += '<th class="dottedleft" colspan="6">Reads</th>';
4540 22 Jun 17 nicklas 47     html += '<th class="dottedleft" colspan="3">Cufflinks</th>'
2826 16 Oct 14 nicklas 48     html += '<th class="dottedleft" colspan="3">Actions</th>';
2826 16 Oct 14 nicklas 49     html += '<th class="dottedleft">Comment</th>';
2826 16 Oct 14 nicklas 50     html += '</tr>';
2826 16 Oct 14 nicklas 51     
2826 16 Oct 14 nicklas 52     html += '<tr>';
2826 16 Oct 14 nicklas 53     html += '<th>Library</th>';
2826 16 Oct 14 nicklas 54     html += '<th class="dottedleft">Plate</th>';
4542 26 Jun 17 nicklas 55     html += '<th class="dottedleft">PF_READS</th>';
4542 26 Jun 17 nicklas 56     html += '<th>PT_READS</th>';
4542 26 Jun 17 nicklas 57     html += '<th>PM_READS</th>';
4542 26 Jun 17 nicklas 58     html += '<th>ALIGNED_PAIRS</th>';
4542 26 Jun 17 nicklas 59     html += '<th>Duplicates</th>'
4542 26 Jun 17 nicklas 60     html += '<th class="warning-col"></th>';
4540 22 Jun 17 nicklas 61     html += '<th class="dottedleft">Job</th>'
4540 22 Jun 17 nicklas 62     html += '<th>FPKM</th>';
4540 22 Jun 17 nicklas 63     html += '<th>Files</th>';
6670 07 Apr 22 nicklas 64     html += '<th class="dottedleft"><span id="flagrna" data-prefix="flag" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Flag RNA</span></th>';
6670 07 Apr 22 nicklas 65     html += '<th><span id="rerun" data-prefix="rerun" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Re-run</span></th>';
6670 07 Apr 22 nicklas 66     html += '<th><span id="geneReport" data-prefix="geneReport" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Gene report</span></th>';
2826 16 Oct 14 nicklas 67     html += '<th class="dottedleft"></th>';
2826 16 Oct 14 nicklas 68     html += '</tr>';
2826 16 Oct 14 nicklas 69     html += '</thead>';
2826 16 Oct 14 nicklas 70     html += '<tbody>';
2826 16 Oct 14 nicklas 71     var numWithError = 0;
3768 24 Feb 16 nicklas 72     var yellowImg = '<img src="../images/yellow-label.png">';
2826 16 Oct 14 nicklas 73     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
2826 16 Oct 14 nicklas 74     {
2826 16 Oct 14 nicklas 75       var raw = rawBioAssays[rawNo];
2826 16 Oct 14 nicklas 76
2826 16 Oct 14 nicklas 77       var lib = raw.lib;
4542 26 Jun 17 nicklas 78       var aligned = raw.aligned;
4542 26 Jun 17 nicklas 79       var masked = raw.masked;
4542 26 Jun 17 nicklas 80       var merged = raw.merged;
4542 26 Jun 17 nicklas 81
2826 16 Oct 14 nicklas 82       lib.stratagene = Reggie.isStratagene(lib.name);
2826 16 Oct 14 nicklas 83       lib.external = Reggie.isExternal(lib.name);
3768 24 Feb 16 nicklas 84       var isYellow = lib.specimen && lib.specimen.YellowLabel != null;
3768 24 Feb 16 nicklas 85       var img = isYellow ? yellowImg : '';
2960 19 Nov 14 nicklas 86       var libPlate = lib.bioWell ? lib.bioWell.bioPlate : null;
2826 16 Oct 14 nicklas 87       
4542 26 Jun 17 nicklas 88       var pfReads = merged.PF_READS == null ? '-' : Reggie.formatNumber(merged.PF_READS/1000000, null, 2)
4542 26 Jun 17 nicklas 89       var ptReads = merged.PT_READS == null ? '-' : Reggie.formatNumber(merged.PT_READS/1000000, null, 2)
4542 26 Jun 17 nicklas 90       var maskedReads = masked.PM_READS == null ? '-' : Reggie.formatNumber(masked.PM_READS/1000000, null, 2)
4542 26 Jun 17 nicklas 91       var alignedReads = aligned.ALIGNED_PAIRS == null ? '-' : Reggie.formatNumber(aligned.ALIGNED_PAIRS/1000000, null, 2);
4542 26 Jun 17 nicklas 92       var ptPercent = merged.PF_READS && merged.PT_READS ? ' (' + Math.round(100*merged.PT_READS/merged.PF_READS) + '%)' : '';
4542 26 Jun 17 nicklas 93       var alignedPercent = aligned.ALIGNED_PAIRS && merged.PF_READS ? ' (' + Math.round(100*aligned.ALIGNED_PAIRS/merged.PF_READS) + '%)' : '';
4542 26 Jun 17 nicklas 94       var percentDuplicates = aligned.FRACTION_DUPLICATION == null ? '-' : Math.round(100*aligned.FRACTION_DUPLICATION)+'%';
4542 26 Jun 17 nicklas 95
2826 16 Oct 14 nicklas 96       var cufflinksJob = raw.cufflinksJob;
4542 26 Jun 17 nicklas 97       var limits = cufflinksJob.limits;
2826 16 Oct 14 nicklas 98       var isError = false;
4542 26 Jun 17 nicklas 99       var flagChecked = false;
2826 16 Oct 14 nicklas 100   
3768 24 Feb 16 nicklas 101       html += '<tr class="highlight ' + (rawNo % 4 < 2 ? 'evenrow' : 'oddrow') + (isYellow ? ' yellow-specimen' : '') + '">';
3768 24 Feb 16 nicklas 102       html += '<td class="prompt if-yellow">'+img+Strings.encodeTags(raw.name)+'</td>';
2960 19 Nov 14 nicklas 103       html += '<td class="dottedleft">'+(libPlate ? Strings.encodeTags(libPlate.name) : '-') +'</td>';
2826 16 Oct 14 nicklas 104
4542 26 Jun 17 nicklas 105       html += '<td class="dottedleft">'+pfReads+'</td>';
4542 26 Jun 17 nicklas 106       html += '<td>'+ptReads+ptPercent+'</td>';
4542 26 Jun 17 nicklas 107       html += '<td>'+maskedReads+'</td>';
4542 26 Jun 17 nicklas 108       html += '<td>'+alignedReads+alignedPercent+'</td>';
4542 26 Jun 17 nicklas 109       html += '<td>'+percentDuplicates+'</td>';
4542 26 Jun 17 nicklas 110       html += '<td class="warning-col">';
5663 11 Oct 19 nicklas 111       if (aligned.ALIGNED_PAIRS != null && aligned.ALIGNED_PAIRS < limits.minAlignedPairsFlag)
4542 26 Jun 17 nicklas 112       {
4542 26 Jun 17 nicklas 113         html += '<img src="../images/warning.png" title="Less than '+Reggie.formatCount(limits.minAlignedPairsFlag) + ' aligned pairs">';
4542 26 Jun 17 nicklas 114         flagChecked = true;
4542 26 Jun 17 nicklas 115       }
4542 26 Jun 17 nicklas 116       html += '</td>';
4542 26 Jun 17 nicklas 117
2826 16 Oct 14 nicklas 118       html += '<td class="dottedleft">';
2826 16 Oct 14 nicklas 119       if (cufflinksJob)
2826 16 Oct 14 nicklas 120       {
2826 16 Oct 14 nicklas 121         isError |= cufflinksJob.status == 'ERROR';
4540 22 Jun 17 nicklas 122         var image = JOB_IMAGE[cufflinksJob.status];
4540 22 Jun 17 nicklas 123         if (!isError && !raw.fpkmFile) image = 'warning.png';
4540 22 Jun 17 nicklas 124         html += '<span class="link item-link" data-item-type="JOB" data-item-id="'+cufflinksJob.id+'" title="'+Strings.encodeTags(cufflinksJob.statusMessage)+'"><img src="../images/'+image+'"></span>';
2826 16 Oct 14 nicklas 125       }
2826 16 Oct 14 nicklas 126       html += '</td>';
2826 16 Oct 14 nicklas 127       html += '<td>';
4540 22 Jun 17 nicklas 128       html += raw.fpkmFile ? 'Yes' : 'No';
2826 16 Oct 14 nicklas 129       html += '</td>';
4540 22 Jun 17 nicklas 130
4545 28 Jun 17 nicklas 131       if (raw.DataFilesFolder && cufflinksJob && cufflinksJob.server)
2826 16 Oct 14 nicklas 132       {
4540 22 Jun 17 nicklas 133         html += '<td>';
4545 28 Jun 17 nicklas 134         html += '<span class="link file-link" data-server="'+Strings.encodeTags(cufflinksJob.server)+'" data-folder="'+Strings.encodeTags(raw.DataFilesFolder)+'" data-item-id="'+aligned.id+'" title="View generated files"><img src="../images/remote_folder.png"></span>';
2826 16 Oct 14 nicklas 135         html += '</td>';
2826 16 Oct 14 nicklas 136       }
2826 16 Oct 14 nicklas 137       else
2826 16 Oct 14 nicklas 138       {
4540 22 Jun 17 nicklas 139         html += '<td>-</td>';
2826 16 Oct 14 nicklas 140       }
2826 16 Oct 14 nicklas 141       // Do not allow flagging external or stratagene
4540 22 Jun 17 nicklas 142       var geneReportChecked = raw.fpkmFile && !isError ? ' checked' : '';
2826 16 Oct 14 nicklas 143       var reRunChecked = isError ? ' checked' : '';
4540 22 Jun 17 nicklas 144       var geneReportDisabled = isError || !raw.fpkmFile ? ' disabled' : '';
2826 16 Oct 14 nicklas 145       if (isError) numWithError++;
2826 16 Oct 14 nicklas 146       
2826 16 Oct 14 nicklas 147       if (lib.stratagene || lib.external)
2826 16 Oct 14 nicklas 148       {
2826 16 Oct 14 nicklas 149         html += '<td class="dottedleft">-</td>';
2826 16 Oct 14 nicklas 150       }
2826 16 Oct 14 nicklas 151       else
2826 16 Oct 14 nicklas 152       {
4542 26 Jun 17 nicklas 153         html += '<td class="dottedleft"><input type="checkbox" name="flag.'+raw.id+'"'+(flagChecked ? ' checked':'')+'></td>';
2826 16 Oct 14 nicklas 154       }
2826 16 Oct 14 nicklas 155       
2826 16 Oct 14 nicklas 156       html += '<td><input type="checkbox" name="rerun.'+raw.id+'"'+reRunChecked+'></td>';
2878 30 Oct 14 nicklas 157       html += '<td><input type="checkbox" name="geneReport.'+raw.id+'"'+geneReportChecked+geneReportDisabled+'></td>';
2826 16 Oct 14 nicklas 158       html += '<td class="dottedleft comment"><input type="text" name="comment.'+raw.id+'"></td>';
2826 16 Oct 14 nicklas 159       html += '</tr>';
2826 16 Oct 14 nicklas 160
2826 16 Oct 14 nicklas 161     }
2826 16 Oct 14 nicklas 162     html += '</tbody>';
2826 16 Oct 14 nicklas 163     html += '</table>';
2826 16 Oct 14 nicklas 164     Doc.element('rawBioAssays').innerHTML = html;
2826 16 Oct 14 nicklas 165     if (numWithError > 0) Doc.show('delete-items', 'table');
6670 07 Apr 22 nicklas 166   
6670 07 Apr 22 nicklas 167     Events.addEventHandler('flagrna', 'click', cufflinks.toggleSelection);
6670 07 Apr 22 nicklas 168     Events.addEventHandler('rerun', 'click', cufflinks.toggleSelection);
6670 07 Apr 22 nicklas 169     Events.addEventHandler('geneReport', 'click', cufflinks.toggleSelection);
6670 07 Apr 22 nicklas 170
2826 16 Oct 14 nicklas 171     // Add click handler to items
2826 16 Oct 14 nicklas 172     var clickableItems = document.getElementsByClassName('item-link');
2826 16 Oct 14 nicklas 173     for (var i = 0; i < clickableItems.length; i++)
2826 16 Oct 14 nicklas 174     {
2826 16 Oct 14 nicklas 175       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
2826 16 Oct 14 nicklas 176     }
2826 16 Oct 14 nicklas 177     
2826 16 Oct 14 nicklas 178     // Add click handler to file links
2826 16 Oct 14 nicklas 179     var clickableItems = document.getElementsByClassName('file-link');
2826 16 Oct 14 nicklas 180     for (var i = 0; i < clickableItems.length; i++)
2826 16 Oct 14 nicklas 181     {
2826 16 Oct 14 nicklas 182       Events.addEventHandler(clickableItems[i], 'click', cufflinks.fileLinkOnClick);
2826 16 Oct 14 nicklas 183     }
2826 16 Oct 14 nicklas 184
2826 16 Oct 14 nicklas 185     Doc.show('step-1');
2826 16 Oct 14 nicklas 186     Doc.show('goregister');
2826 16 Oct 14 nicklas 187   }
2826 16 Oct 14 nicklas 188   
2826 16 Oct 14 nicklas 189   cufflinks.fileLinkOnClick = function(event)
2826 16 Oct 14 nicklas 190   {
2826 16 Oct 14 nicklas 191     var folder = Data.get(event.currentTarget, 'folder');
2826 16 Oct 14 nicklas 192     var server = Data.get(event.currentTarget, 'server');
2826 16 Oct 14 nicklas 193     var itemId = Data.get(event.currentTarget, 'item-id');
2826 16 Oct 14 nicklas 194     server = server.replace(/\s*\[.*\]/, '');
2826 16 Oct 14 nicklas 195     var url = 'view_remote_files.jsp?ID=' + App.getSessionId();
2826 16 Oct 14 nicklas 196     url += '&clusterId='+server;
2826 16 Oct 14 nicklas 197     url += '&path='+encodeURIComponent(folder);
4542 26 Jun 17 nicklas 198     url += '&itemType=DERIVEDBIOASSAY&itemId='+itemId;
2826 16 Oct 14 nicklas 199     Dialogs.openPopup(url, 'ViewProjectFiles', 750, 500);
2826 16 Oct 14 nicklas 200   }
2826 16 Oct 14 nicklas 201   
6670 07 Apr 22 nicklas 202   cufflinks.toggleSelection = function(event)
6670 07 Apr 22 nicklas 203   {
6670 07 Apr 22 nicklas 204     var prefix = Data.get(event.currentTarget, 'prefix');
6670 07 Apr 22 nicklas 205     var specialKey = event.altKey || event.ctrlKey || event.shiftKey;
6670 07 Apr 22 nicklas 206     
6670 07 Apr 22 nicklas 207     var frm = document.forms['reggie'];
6670 07 Apr 22 nicklas 208     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
6670 07 Apr 22 nicklas 209     {
6670 07 Apr 22 nicklas 210       var raw = rawBioAssays[rawNo];
6670 07 Apr 22 nicklas 211       var chk = frm[prefix+'.'+raw.id];
6670 07 Apr 22 nicklas 212       if (chk && !chk.disabled)
6670 07 Apr 22 nicklas 213       {
6670 07 Apr 22 nicklas 214         chk.checked = specialKey ? false : !chk.checked;
6670 07 Apr 22 nicklas 215       }
6670 07 Apr 22 nicklas 216     }
6670 07 Apr 22 nicklas 217   }
6670 07 Apr 22 nicklas 218
2826 16 Oct 14 nicklas 219   cufflinks.submit = function()
2826 16 Oct 14 nicklas 220   {
2826 16 Oct 14 nicklas 221     var frm = document.forms['reggie'];
2826 16 Oct 14 nicklas 222     var submitInfo = {};
2826 16 Oct 14 nicklas 223     submitInfo.deleteItemsCreatedByFailedJobs = frm.deleteItemsCreatedByFailedJobs.checked;
2826 16 Oct 14 nicklas 224     
2826 16 Oct 14 nicklas 225     var all = [];
2826 16 Oct 14 nicklas 226     submitInfo.rawBioAssays = all;
2826 16 Oct 14 nicklas 227     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
2826 16 Oct 14 nicklas 228     {
2826 16 Oct 14 nicklas 229       var raw = rawBioAssays[rawNo];
2826 16 Oct 14 nicklas 230       var tmp = {};
2826 16 Oct 14 nicklas 231       tmp.id = raw.id;
2826 16 Oct 14 nicklas 232       
2826 16 Oct 14 nicklas 233       tmp.flag = frm['flag.'+raw.id] && frm['flag.'+raw.id].checked;
2826 16 Oct 14 nicklas 234       tmp.rerun = frm['rerun.'+raw.id].checked;
2878 30 Oct 14 nicklas 235       tmp.geneReport = frm['geneReport.'+raw.id].checked;
2826 16 Oct 14 nicklas 236       tmp.comment = frm['comment.'+raw.id].value;
2826 16 Oct 14 nicklas 237       
2826 16 Oct 14 nicklas 238       all[all.length] = tmp;
2826 16 Oct 14 nicklas 239     }
2826 16 Oct 14 nicklas 240     
2826 16 Oct 14 nicklas 241     var url = '../Cufflinks.servlet?ID='+App.getSessionId();
2826 16 Oct 14 nicklas 242     url += '&cmd=RegisterCufflinks';
2826 16 Oct 14 nicklas 243     Wizard.showLoadingAnimation('Performing registration...');
2826 16 Oct 14 nicklas 244     Wizard.asyncJsonRequest(url, cufflinks.submissionResults, 'POST', JSON.stringify(submitInfo));
2826 16 Oct 14 nicklas 245   }
2826 16 Oct 14 nicklas 246   
2826 16 Oct 14 nicklas 247   cufflinks.submissionResults = function(response)
2826 16 Oct 14 nicklas 248   {
2826 16 Oct 14 nicklas 249     Wizard.showFinalMessage(response.messages);
2826 16 Oct 14 nicklas 250     Doc.show('gorestart');
2826 16 Oct 14 nicklas 251   }
2826 16 Oct 14 nicklas 252   
2826 16 Oct 14 nicklas 253   
2826 16 Oct 14 nicklas 254   return cufflinks;
2826 16 Oct 14 nicklas 255 }();
2826 16 Oct 14 nicklas 256
2826 16 Oct 14 nicklas 257 Doc.onLoad(Cufflinks.initPage);
2826 16 Oct 14 nicklas 258