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

Code
Comments
Other
Rev Date Author Line
4663 29 Jan 18 nicklas 1 var StringTie = function()
4661 29 Jan 18 nicklas 2 {
4661 29 Jan 18 nicklas 3   var stringtie = {};
4661 29 Jan 18 nicklas 4   var debug = 0;
5547 07 Aug 19 nicklas 5   var selectionIsValid = false;
4661 29 Jan 18 nicklas 6   var subtypeAlignedSequences = null;
5547 07 Aug 19 nicklas 7   var annotationTypePipeline = null;
4668 01 Feb 18 nicklas 8   var fileTypeBAM = null;
4668 01 Feb 18 nicklas 9   
4661 29 Jan 18 nicklas 10   var clusterIsValid = false;
4665 31 Jan 18 nicklas 11   var arrayDesignIsValid = false;
4990 01 Oct 18 nicklas 12   var manuallySelected = [];
4661 29 Jan 18 nicklas 13   
4661 29 Jan 18 nicklas 14   // Page initialization
4661 29 Jan 18 nicklas 15   stringtie.initPage = function()
4661 29 Jan 18 nicklas 16   {
4661 29 Jan 18 nicklas 17     
4661 29 Jan 18 nicklas 18     // Step 1
4661 29 Jan 18 nicklas 19     Buttons.addClickHandler('btnSelectAlignedSequences', stringtie.selectAlignedSequences);
4661 29 Jan 18 nicklas 20     Events.addEventHandler('alignedSequences', 'base-selected', stringtie.setAlignedSequenceCallback);
4990 01 Oct 18 nicklas 21     Events.addEventHandler('alignedSequences', 'change', stringtie.alignedSequencesOnChange);
4661 29 Jan 18 nicklas 22     Events.addEventHandler('step-1', 'wizard-validate', stringtie.validateStep1);
4661 29 Jan 18 nicklas 23
4661 29 Jan 18 nicklas 24     // Step 2
4661 29 Jan 18 nicklas 25     Events.addEventHandler('step-2', 'wizard-initialize', stringtie.initializeStep2);
4661 29 Jan 18 nicklas 26     Events.addEventHandler('step-2', 'wizard-validate', stringtie.validateStep2);
4661 29 Jan 18 nicklas 27     Events.addEventHandler('clusters', 'change', stringtie.clusterOnChange);
7372 06 Oct 23 nicklas 28     Events.addEventHandler('debug', 'change', stringtie.debugOnChange);
7372 06 Oct 23 nicklas 29     Events.addEventHandler('override', 'change', stringtie.overrideOnChange);
4661 29 Jan 18 nicklas 30     Events.addEventHandler('stringtieSoftware', 'change', stringtie.softwareOnChange);
4661 29 Jan 18 nicklas 31
4661 29 Jan 18 nicklas 32     // Navigation
4661 29 Jan 18 nicklas 33     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
4661 29 Jan 18 nicklas 34     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
4661 29 Jan 18 nicklas 35     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
4661 29 Jan 18 nicklas 36     Buttons.addClickHandler('goregister', Wizard.goRegister);
4661 29 Jan 18 nicklas 37     
4661 29 Jan 18 nicklas 38     // Final registration
4661 29 Jan 18 nicklas 39     Events.addEventHandler('wizard', 'wizard-submit', stringtie.submit);
4661 29 Jan 18 nicklas 40
4661 29 Jan 18 nicklas 41     Wizard.showLoadingAnimation('Loading bioassays...');
4663 29 Jan 18 nicklas 42     var url = '../StringTie.servlet?ID='+App.getSessionId();
4663 29 Jan 18 nicklas 43     url += '&cmd=GetAlignedSequencesForStringTie';
4661 29 Jan 18 nicklas 44     Wizard.asyncJsonRequest(url, stringtie.initializeStep1);
4661 29 Jan 18 nicklas 45   }
4661 29 Jan 18 nicklas 46   
4661 29 Jan 18 nicklas 47   // --- Step 1 -----------------------------------
4661 29 Jan 18 nicklas 48   stringtie.initializeStep1 = function(response)
4661 29 Jan 18 nicklas 49   {
4661 29 Jan 18 nicklas 50     var alignedSequences = response.alignedSequences;
4661 29 Jan 18 nicklas 51     var frm = document.forms['reggie'];  
4661 29 Jan 18 nicklas 52
4661 29 Jan 18 nicklas 53     if (alignedSequences != null && alignedSequences.length > 0)
4661 29 Jan 18 nicklas 54     {
4661 29 Jan 18 nicklas 55       var firstPlate = null;
4661 29 Jan 18 nicklas 56       for (var asNo=0; asNo < alignedSequences.length; asNo++)
4661 29 Jan 18 nicklas 57       {
4661 29 Jan 18 nicklas 58         var as = alignedSequences[asNo];
4990 01 Oct 18 nicklas 59         var libPlate = as.lib.bioWell ? as.lib.bioWell.bioPlate : null;
4661 29 Jan 18 nicklas 60         if (firstPlate == null && libPlate != null) firstPlate = libPlate.name;
4990 01 Oct 18 nicklas 61         var option = stringtie.createListOption(asNo+1, as, as.DO_NOT_USE == null && libPlate != null && libPlate.name==firstPlate)
4661 29 Jan 18 nicklas 62         frm.alignedSequences.options[frm.alignedSequences.length] = option;
4661 29 Jan 18 nicklas 63       }
5547 07 Aug 19 nicklas 64       Events.sendChangeEvent('alignedSequences');
4661 29 Jan 18 nicklas 65     }
4661 29 Jan 18 nicklas 66     else
4661 29 Jan 18 nicklas 67     {
4661 29 Jan 18 nicklas 68       Wizard.setInputStatus('alignedSequences', 'invalid', 'No new sequences available for processing');
4661 29 Jan 18 nicklas 69     }
4661 29 Jan 18 nicklas 70     
4661 29 Jan 18 nicklas 71     Doc.show('step-1');
4661 29 Jan 18 nicklas 72     Doc.show('gonext');
4661 29 Jan 18 nicklas 73
4661 29 Jan 18 nicklas 74     frm.alignedSequences.focus();
4661 29 Jan 18 nicklas 75   }
4661 29 Jan 18 nicklas 76   
4661 29 Jan 18 nicklas 77   stringtie.validateStep1 = function(event)
4661 29 Jan 18 nicklas 78   {
5547 07 Aug 19 nicklas 79     if (!selectionIsValid) event.preventDefault();
4661 29 Jan 18 nicklas 80   }
4661 29 Jan 18 nicklas 81   
4661 29 Jan 18 nicklas 82   stringtie.selectAlignedSequences = function()
4661 29 Jan 18 nicklas 83   {
4661 29 Jan 18 nicklas 84     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 85     if (frm.alignedSequences.disabled) return;
4661 29 Jan 18 nicklas 86     
4661 29 Jan 18 nicklas 87     if (subtypeAlignedSequences == null)
4661 29 Jan 18 nicklas 88     {
4661 29 Jan 18 nicklas 89       subtypeAlignedSequences = Reggie.getSubtypeInfo('ALIGNED_SEQUENCES');
4661 29 Jan 18 nicklas 90     }
4668 01 Feb 18 nicklas 91     if (fileTypeBAM == null)
4668 01 Feb 18 nicklas 92     {
4668 01 Feb 18 nicklas 93       fileTypeBAM = Reggie.getDataFileTypeInfo('BAM');
4668 01 Feb 18 nicklas 94     }
5547 07 Aug 19 nicklas 95     if (annotationTypePipeline == null)
5547 07 Aug 19 nicklas 96     {
5547 07 Aug 19 nicklas 97       annotationTypePipeline = Reggie.getAnnotationTypeInfo('PIPELINE');
5547 07 Aug 19 nicklas 98     }
4661 29 Jan 18 nicklas 99     
4990 01 Oct 18 nicklas 100     // Reset list
4990 01 Oct 18 nicklas 101     manuallySelected = [];
4661 29 Jan 18 nicklas 102     var url = '&resetTemporary=1';
4668 01 Feb 18 nicklas 103     // Alignments with Hisat gives us 'AlignedSequences' items with 'alignment.bam'
4661 29 Jan 18 nicklas 104     url += '&tmpfilter:INT:itemSubtype='+subtypeAlignedSequences.id;
4668 01 Feb 18 nicklas 105     url += '&tmpfilter:STRING:'+encodeURIComponent('ยค'+fileTypeBAM.id+'(file.name)')+'=alignment.bam';
5547 07 Aug 19 nicklas 106     url += '&tmpfilter:STRING:'+encodeURIComponent('#')+annotationTypePipeline.id+'='+encodeURIComponent('RNAseq/Hisat/StringTie');
4668 01 Feb 18 nicklas 107
4661 29 Jan 18 nicklas 108     Dialogs.selectItem('DERIVEDBIOASSAY', 'alignedSequences', 1, url);
4661 29 Jan 18 nicklas 109   }
4661 29 Jan 18 nicklas 110
4661 29 Jan 18 nicklas 111   stringtie.setAlignedSequenceCallback = function(event)
4661 29 Jan 18 nicklas 112   {
4661 29 Jan 18 nicklas 113     var ms = event.detail;
4661 29 Jan 18 nicklas 114     
4990 01 Oct 18 nicklas 115     var opt = Reggie.getListOption('alignedSequences', ms.id);
4990 01 Oct 18 nicklas 116     if (opt)
4661 29 Jan 18 nicklas 117     {
4990 01 Oct 18 nicklas 118       opt.selected = true;
4990 01 Oct 18 nicklas 119     }
4990 01 Oct 18 nicklas 120     else
4990 01 Oct 18 nicklas 121     {
4990 01 Oct 18 nicklas 122       manuallySelected[manuallySelected.length] = ms.id;
4990 01 Oct 18 nicklas 123     }
4990 01 Oct 18 nicklas 124     
4990 01 Oct 18 nicklas 125     if (ms.remaining == 0 && manuallySelected.length > 0)
4990 01 Oct 18 nicklas 126     {
4990 01 Oct 18 nicklas 127       var url = '../StringTie.servlet?ID='+App.getSessionId();
4990 01 Oct 18 nicklas 128       url += '&cmd=GetAlignedSequencesForStringTie';
4990 01 Oct 18 nicklas 129       url += '&items='+manuallySelected.join(',');
4990 01 Oct 18 nicklas 130       Wizard.showLoadingAnimation('Loading bioassays...');
4990 01 Oct 18 nicklas 131       Wizard.asyncJsonRequest(url, stringtie.manuallySelected);
4990 01 Oct 18 nicklas 132     }
4990 01 Oct 18 nicklas 133     else
4990 01 Oct 18 nicklas 134     {
4990 01 Oct 18 nicklas 135       Events.sendChangeEvent('alignedSequences');
4990 01 Oct 18 nicklas 136     }
4990 01 Oct 18 nicklas 137   }
4990 01 Oct 18 nicklas 138
4990 01 Oct 18 nicklas 139   stringtie.manuallySelected = function(response)
4990 01 Oct 18 nicklas 140   {
4990 01 Oct 18 nicklas 141     var alignedSequences = response.alignedSequences;
4990 01 Oct 18 nicklas 142     var frm = document.forms['reggie'];  
4990 01 Oct 18 nicklas 143
4990 01 Oct 18 nicklas 144     if (alignedSequences != null && alignedSequences.length > 0)
4990 01 Oct 18 nicklas 145     {
4990 01 Oct 18 nicklas 146       var offset = frm.alignedSequences.length+1;
4990 01 Oct 18 nicklas 147       for (var asNo=0; asNo < alignedSequences.length; asNo++)
4661 29 Jan 18 nicklas 148       {
4990 01 Oct 18 nicklas 149         var as = alignedSequences[asNo];
4990 01 Oct 18 nicklas 150         var option = stringtie.createListOption(asNo+offset, as, as.DO_NOT_USE == null);
4990 01 Oct 18 nicklas 151         frm.alignedSequences.options[frm.alignedSequences.length] = option;
4661 29 Jan 18 nicklas 152       }
4990 01 Oct 18 nicklas 153       Events.sendChangeEvent('alignedSequences');
4661 29 Jan 18 nicklas 154     }
4990 01 Oct 18 nicklas 155   }
4661 29 Jan 18 nicklas 156
4990 01 Oct 18 nicklas 157   stringtie.createListOption = function(index, alignedItem, selected)
4990 01 Oct 18 nicklas 158   {
4990 01 Oct 18 nicklas 159     var lib = alignedItem.lib;
4990 01 Oct 18 nicklas 160     var isYellow = lib.specimen && lib.specimen.YellowLabel != null;
4990 01 Oct 18 nicklas 161     var libPlate = lib.bioWell ? lib.bioWell.bioPlate : null;
4990 01 Oct 18 nicklas 162     
4990 01 Oct 18 nicklas 163     var tooltip = null;
4990 01 Oct 18 nicklas 164     var name = (index) + ': ';
4990 01 Oct 18 nicklas 165     if (libPlate) name += libPlate.name + ' - ';
4990 01 Oct 18 nicklas 166     name += alignedItem.name;
4990 01 Oct 18 nicklas 167     
4990 01 Oct 18 nicklas 168     if (alignedItem.DO_NOT_USE)
4990 01 Oct 18 nicklas 169     {
4990 01 Oct 18 nicklas 170       name += ' [DoNotUse]';
4990 01 Oct 18 nicklas 171       tooltip = 'DoNotUse-'+Strings.encodeTags(alignedItem.DO_NOT_USE+': '+alignedItem.DO_NOT_USE_COMMENT);
4990 01 Oct 18 nicklas 172     }
4990 01 Oct 18 nicklas 173     else if (alignedItem.AutoProcess == 'ReProcess')
4990 01 Oct 18 nicklas 174     {
4990 01 Oct 18 nicklas 175       name += ' [R]';
4990 01 Oct 18 nicklas 176     }
4990 01 Oct 18 nicklas 177     
4990 01 Oct 18 nicklas 178     var option = new Option(name, alignedItem.id, false, selected);
4990 01 Oct 18 nicklas 179     if (isYellow) option.className = 'yellow';
4990 01 Oct 18 nicklas 180     if (tooltip) option.title = tooltip;
4990 01 Oct 18 nicklas 181     option.alignedSequences = alignedItem;
4990 01 Oct 18 nicklas 182     return option;
4661 29 Jan 18 nicklas 183   }
4990 01 Oct 18 nicklas 184   
4990 01 Oct 18 nicklas 185   stringtie.alignedSequencesOnChange = function()
4990 01 Oct 18 nicklas 186   {
4990 01 Oct 18 nicklas 187     var frm = document.forms['reggie'];
4990 01 Oct 18 nicklas 188     
5547 07 Aug 19 nicklas 189     selectionIsValid = false;
5547 07 Aug 19 nicklas 190     var numSelected = 0;
4990 01 Oct 18 nicklas 191     var numDoNotUse = 0;
5547 07 Aug 19 nicklas 192     var invalidPipeline = null;
5547 07 Aug 19 nicklas 193     Wizard.setInputStatus('alignedSequences');
5547 07 Aug 19 nicklas 194     Wizard.hideGoNextConfirmation();
5547 07 Aug 19 nicklas 195
4990 01 Oct 18 nicklas 196     for (var asNo = 0; asNo < frm.alignedSequences.length; asNo++)
4990 01 Oct 18 nicklas 197     {
4990 01 Oct 18 nicklas 198       if (frm.alignedSequences[asNo].selected) 
4990 01 Oct 18 nicklas 199       {
5547 07 Aug 19 nicklas 200         numSelected++;
4990 01 Oct 18 nicklas 201         var as = frm.alignedSequences[asNo].alignedSequences;
4990 01 Oct 18 nicklas 202         if (as.DO_NOT_USE) numDoNotUse++;
5547 07 Aug 19 nicklas 203         if (as.pipeline && as.pipeline != 'RNAseq/Hisat/StringTie')
5547 07 Aug 19 nicklas 204         {
5547 07 Aug 19 nicklas 205           invalidPipeline = Strings.encodeTags(as.name+' ('+as.pipeline)+') is not intended for the RNAseq/Hisat/StringTie pipeline.';
5547 07 Aug 19 nicklas 206         }
4990 01 Oct 18 nicklas 207       }
4990 01 Oct 18 nicklas 208     }
4990 01 Oct 18 nicklas 209     
5547 07 Aug 19 nicklas 210     if (numSelected == 0)
5547 07 Aug 19 nicklas 211     {
5547 07 Aug 19 nicklas 212       Wizard.setInputStatus('alignedSequences', 'invalid', 'Select at least one item');
5547 07 Aug 19 nicklas 213       return;
5547 07 Aug 19 nicklas 214     }
5547 07 Aug 19 nicklas 215     if (invalidPipeline) 
5547 07 Aug 19 nicklas 216     {
5547 07 Aug 19 nicklas 217       Wizard.setInputStatus('alignedSequences', 'invalid', invalidPipeline);
5547 07 Aug 19 nicklas 218       return;
5547 07 Aug 19 nicklas 219     }
5547 07 Aug 19 nicklas 220     selectionIsValid = true;
4990 01 Oct 18 nicklas 221     if (numDoNotUse > 0)
4990 01 Oct 18 nicklas 222     {
4990 01 Oct 18 nicklas 223       Wizard.setInputStatus('alignedSequences', 'warning', numDoNotUse + ' selected items marked as DoNotUse');
4990 01 Oct 18 nicklas 224       Wizard.showGoNextConfirmation(true, 'Confirm ' + numDoNotUse + ' items marked as DoNotUse');
4990 01 Oct 18 nicklas 225     }
4990 01 Oct 18 nicklas 226     else
4990 01 Oct 18 nicklas 227     {
5547 07 Aug 19 nicklas 228       Wizard.setInputStatus('alignedSequences', 'valid');
4990 01 Oct 18 nicklas 229     }
4990 01 Oct 18 nicklas 230   }
4661 29 Jan 18 nicklas 231
4661 29 Jan 18 nicklas 232   // --- Step 2 -----------------------------------
4661 29 Jan 18 nicklas 233   stringtie.initializeStep2 = function()
4661 29 Jan 18 nicklas 234   {
4661 29 Jan 18 nicklas 235     Wizard.setCurrentStep(2);
4661 29 Jan 18 nicklas 236     
4661 29 Jan 18 nicklas 237     // Check debug by default if debug is set or not on a secure server (=production server)
4661 29 Jan 18 nicklas 238     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 239     frm.debug.checked = debug || location.protocol != 'https:';
4661 29 Jan 18 nicklas 240
6812 25 Aug 22 nicklas 241     Reggie.loadProtocols('FEATURE_EXTRACTION_PROTOCOL', 'stringtieProtocol', 'PIPELINE', 'RNAseq/Hisat/StringTie');
6812 25 Aug 22 nicklas 242     Reggie.loadSoftware('FEATURE_EXTRACTION_SOFTWARE', 'stringtieSoftware', 'PIPELINE,PARAMETER_SET', 'RNAseq/Hisat/StringTie');
4661 29 Jan 18 nicklas 243     
4661 29 Jan 18 nicklas 244     // Load array design
4663 29 Jan 18 nicklas 245     var url = '../StringTie.servlet?ID='+App.getSessionId() + '&cmd=GetArrayDesigns';
4661 29 Jan 18 nicklas 246     Doc.addClass('arrayDesign', 'list-loading');
4661 29 Jan 18 nicklas 247     frm.arrayDesign[0] = new Option('loading...');
4661 29 Jan 18 nicklas 248     Wizard.asyncJsonRequest(url, stringtie.arrayDesignsLoaded);
4661 29 Jan 18 nicklas 249
6735 09 May 22 nicklas 250     // Load clusters
6633 08 Mar 22 nicklas 251     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=stringtie';
4661 29 Jan 18 nicklas 252     Doc.addClass('clusters', 'list-loading');
4661 29 Jan 18 nicklas 253     frm.clusters[0] = new Option('loading...');
4661 29 Jan 18 nicklas 254     Wizard.asyncJsonRequest(url, stringtie.clustersLoaded);
4661 29 Jan 18 nicklas 255
4661 29 Jan 18 nicklas 256     Doc.show('goregister');
4661 29 Jan 18 nicklas 257     Doc.show('gocancel');
4661 29 Jan 18 nicklas 258   }
4661 29 Jan 18 nicklas 259   
4665 31 Jan 18 nicklas 260   stringtie.validateStep2 = function(event)
4661 29 Jan 18 nicklas 261   {
4661 29 Jan 18 nicklas 262     if (!clusterIsValid) event.preventDefault();
4665 31 Jan 18 nicklas 263     if (!arrayDesignIsValid) event.preventDefault();
4661 29 Jan 18 nicklas 264   }
4661 29 Jan 18 nicklas 265   
4661 29 Jan 18 nicklas 266   stringtie.arrayDesignsLoaded = function(response)
4661 29 Jan 18 nicklas 267   {
4661 29 Jan 18 nicklas 268     Doc.removeClass('arrayDesign', 'list-loading');
4661 29 Jan 18 nicklas 269     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 270     var designs = response.arrayDesigns;
4661 29 Jan 18 nicklas 271     frm.arrayDesign.length = 0;
4661 29 Jan 18 nicklas 272     for (var i = 0; i < designs.length; i++)
4661 29 Jan 18 nicklas 273     {
4661 29 Jan 18 nicklas 274       var design = designs[i];
4661 29 Jan 18 nicklas 275       var option = new Option(design.name + ' ('+design.numFeatures+')', design.id, design.isDefault, design.isDefault);
4661 29 Jan 18 nicklas 276       option.arrayDesign = design;
4661 29 Jan 18 nicklas 277       frm.arrayDesign[frm.arrayDesign.length] = option;
4661 29 Jan 18 nicklas 278     }
4661 29 Jan 18 nicklas 279     if (frm.arrayDesign.length == 0)
4661 29 Jan 18 nicklas 280     {
4661 29 Jan 18 nicklas 281       Wizard.setInputStatus('arrayDesign', 'invalid', 'No available array designs');
4661 29 Jan 18 nicklas 282       arrayDesignIsValid = false;
4661 29 Jan 18 nicklas 283     }
4661 29 Jan 18 nicklas 284     else
4661 29 Jan 18 nicklas 285     {
4661 29 Jan 18 nicklas 286       Wizard.setInputStatus('arrayDesign', 'valid');
4661 29 Jan 18 nicklas 287       arrayDesignIsValid = true;
4661 29 Jan 18 nicklas 288     }
4661 29 Jan 18 nicklas 289   }
4661 29 Jan 18 nicklas 290   
4661 29 Jan 18 nicklas 291   stringtie.clustersLoaded = function(response)
4661 29 Jan 18 nicklas 292   {
4661 29 Jan 18 nicklas 293     Doc.removeClass('clusters', 'list-loading');
4661 29 Jan 18 nicklas 294     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 295     var clusters = response.hosts;
4661 29 Jan 18 nicklas 296     frm.clusters.length = 0;
4661 29 Jan 18 nicklas 297     for (var i = 0; i < clusters.length; i++)
4661 29 Jan 18 nicklas 298     {
4661 29 Jan 18 nicklas 299       var cl = clusters[i];
4661 29 Jan 18 nicklas 300       var option = new Option(cl.connection.name, cl.id);
4661 29 Jan 18 nicklas 301       option.cluster = cl;
4661 29 Jan 18 nicklas 302       frm.clusters[frm.clusters.length] = option;
4661 29 Jan 18 nicklas 303       Wizard.setInputStatus('clusters', 'valid');
4661 29 Jan 18 nicklas 304       clusterIsValid = true;
4661 29 Jan 18 nicklas 305     }
4661 29 Jan 18 nicklas 306     if (frm.clusters.length == 0)
4661 29 Jan 18 nicklas 307     {
6735 09 May 22 nicklas 308       Wizard.setInputStatus('clusters', 'invalid', 'No available clusters');
4661 29 Jan 18 nicklas 309       clusterIsValid = false;
4661 29 Jan 18 nicklas 310     }
4661 29 Jan 18 nicklas 311     else
4661 29 Jan 18 nicklas 312     {
4661 29 Jan 18 nicklas 313       stringtie.clusterOnChange();
4661 29 Jan 18 nicklas 314     }
4661 29 Jan 18 nicklas 315   }
4661 29 Jan 18 nicklas 316   
4661 29 Jan 18 nicklas 317   stringtie.softwareOnChange = function(event)
4661 29 Jan 18 nicklas 318   {
4661 29 Jan 18 nicklas 319     var target = event.currentTarget;
4661 29 Jan 18 nicklas 320     var item = target[target.selectedIndex].item;
4661 29 Jan 18 nicklas 321     if (!item) item = {};
4661 29 Jan 18 nicklas 322     
4661 29 Jan 18 nicklas 323     Doc.element(target.id+'.parameterSet').innerHTML = Strings.encodeTags(item.ParameterSet || 'default');
4661 29 Jan 18 nicklas 324     Doc.element(target.id+'.description').innerHTML = Strings.encodeTags(item.description);
4661 29 Jan 18 nicklas 325     Wizard.setInputStatus(target.id, 'valid');
4661 29 Jan 18 nicklas 326
4661 29 Jan 18 nicklas 327     if (item.ParameterSet)
4661 29 Jan 18 nicklas 328     {
4661 29 Jan 18 nicklas 329       var url = '../Install.servlet?ID='+App.getSessionId();
4661 29 Jan 18 nicklas 330       url += '&cmd=GetParameterSetInfo';
4661 29 Jan 18 nicklas 331       url += '&parameterSet='+encodeURIComponent(item.ParameterSet);
4661 29 Jan 18 nicklas 332       url += '&targetId='+target.id;
4661 29 Jan 18 nicklas 333       Wizard.asyncJsonRequest(url, stringtie.parameterSetInfoLoaded);
4661 29 Jan 18 nicklas 334     }
7372 06 Oct 23 nicklas 335     stringtie.updateSubmitOptions();
4661 29 Jan 18 nicklas 336   }
4661 29 Jan 18 nicklas 337   
4661 29 Jan 18 nicklas 338   stringtie.parameterSetInfoLoaded = function(response)
4661 29 Jan 18 nicklas 339   {
4661 29 Jan 18 nicklas 340     if (!response.parameters || response.parameters.length == 0)
4661 29 Jan 18 nicklas 341     {
4661 29 Jan 18 nicklas 342       Wizard.setInputStatus(response.targetId, 'warning', 'Can\'t find \'' + Strings.encodeTags(response.parameterSet) + '\' parameter set in reggie-config.xml');
4661 29 Jan 18 nicklas 343     }
4661 29 Jan 18 nicklas 344   }
4661 29 Jan 18 nicklas 345   
4661 29 Jan 18 nicklas 346   stringtie.clusterOnChange = function()
4661 29 Jan 18 nicklas 347   {
4661 29 Jan 18 nicklas 348     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 349     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
4661 29 Jan 18 nicklas 350     if (cluster.priorities && cluster.priorities.length > 0)
4661 29 Jan 18 nicklas 351     {
4661 29 Jan 18 nicklas 352       frm.priority.length = 0;
4661 29 Jan 18 nicklas 353       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
4661 29 Jan 18 nicklas 354       {
4661 29 Jan 18 nicklas 355         var p = cluster.priorities[pNo];
4661 29 Jan 18 nicklas 356         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
4661 29 Jan 18 nicklas 357       }
4661 29 Jan 18 nicklas 358       Doc.show('job-priority');
4661 29 Jan 18 nicklas 359     }
4661 29 Jan 18 nicklas 360     else
4661 29 Jan 18 nicklas 361     {
4661 29 Jan 18 nicklas 362       Doc.hide('job-priority');
4661 29 Jan 18 nicklas 363     }
6980 17 Jan 23 nicklas 364     if (cluster.partitions && cluster.partitions.length > 0)
6980 17 Jan 23 nicklas 365     {
6980 17 Jan 23 nicklas 366       frm.partition.length = 0;
6980 17 Jan 23 nicklas 367       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
6980 17 Jan 23 nicklas 368       {
6980 17 Jan 23 nicklas 369         var p = cluster.partitions[pNo];
6980 17 Jan 23 nicklas 370         var title = p.name;
6980 17 Jan 23 nicklas 371         if (p.description) title += ' ('+p.description+')';
6980 17 Jan 23 nicklas 372         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
6980 17 Jan 23 nicklas 373       }
6980 17 Jan 23 nicklas 374       Doc.show('job-partition');
6980 17 Jan 23 nicklas 375     }
6980 17 Jan 23 nicklas 376     else
6980 17 Jan 23 nicklas 377     {
6980 17 Jan 23 nicklas 378       Doc.hide('job-partition');
6980 17 Jan 23 nicklas 379     }
7372 06 Oct 23 nicklas 380     stringtie.updateSubmitOptions();
4661 29 Jan 18 nicklas 381   }
7372 06 Oct 23 nicklas 382   
7372 06 Oct 23 nicklas 383   stringtie.debugOnChange = function()
7372 06 Oct 23 nicklas 384   {
7372 06 Oct 23 nicklas 385     stringtie.updateSubmitOptions();
7372 06 Oct 23 nicklas 386   }
7372 06 Oct 23 nicklas 387   
7372 06 Oct 23 nicklas 388   stringtie.updateSubmitOptions = function()
7372 06 Oct 23 nicklas 389   {
7372 06 Oct 23 nicklas 390     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 391     var config = frm.clusters[frm.clusters.selectedIndex]?.cluster?.config?.stringtie;
7372 06 Oct 23 nicklas 392     if (config)
7372 06 Oct 23 nicklas 393     {
7372 06 Oct 23 nicklas 394       var parameterSet = frm.stringtieSoftware[frm.stringtieSoftware.selectedIndex]?.item?.ParameterSet;
7372 06 Oct 23 nicklas 395       Doc.element('submitOptions').innerHTML = Reggie.getSubmitOptions(config, frm.debug.checked, parameterSet);
7372 06 Oct 23 nicklas 396       frm.override.disabled = false;
7372 06 Oct 23 nicklas 397     }
7372 06 Oct 23 nicklas 398   }
7372 06 Oct 23 nicklas 399   
7372 06 Oct 23 nicklas 400   stringtie.overrideOnChange = function()
7372 06 Oct 23 nicklas 401   {
7372 06 Oct 23 nicklas 402     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 403     Doc.showHide('submitOptions', !frm.override.checked);
7372 06 Oct 23 nicklas 404     Doc.showHide('submitOptionsOverride', frm.override.checked);
7372 06 Oct 23 nicklas 405     if (frm.submitOptionsOverride.value=='') 
7372 06 Oct 23 nicklas 406     {
7372 06 Oct 23 nicklas 407       frm.submitOptionsOverride.value = Doc.element('submitOptions').innerHTML;
7372 06 Oct 23 nicklas 408     }
7372 06 Oct 23 nicklas 409   }
4661 29 Jan 18 nicklas 410
4661 29 Jan 18 nicklas 411   stringtie.submit = function()
4661 29 Jan 18 nicklas 412   {
4661 29 Jan 18 nicklas 413     var frm = document.forms['reggie'];
4661 29 Jan 18 nicklas 414       
4661 29 Jan 18 nicklas 415     var submitInfo = {};
4661 29 Jan 18 nicklas 416     submitInfo.stringtieSoftware = parseInt(frm.stringtieSoftware.value);
4661 29 Jan 18 nicklas 417     submitInfo.stringtieProtocol = parseInt(frm.stringtieProtocol.value);
4661 29 Jan 18 nicklas 418     submitInfo.arrayDesign = parseInt(frm.arrayDesign.value);
4661 29 Jan 18 nicklas 419     submitInfo.cluster = frm.clusters.value;
4661 29 Jan 18 nicklas 420     if (frm.priority.selectedIndex >= 0)
4661 29 Jan 18 nicklas 421     {
4661 29 Jan 18 nicklas 422       submitInfo.priority = parseInt(frm.priority.value);
4661 29 Jan 18 nicklas 423     }
6980 17 Jan 23 nicklas 424     if (frm.partition.selectedIndex >= 0)
6980 17 Jan 23 nicklas 425     {
6980 17 Jan 23 nicklas 426       submitInfo.partition = frm.partition.value;
6980 17 Jan 23 nicklas 427     }
7372 06 Oct 23 nicklas 428     if (frm.override.checked)
7372 06 Oct 23 nicklas 429     {
7372 06 Oct 23 nicklas 430       submitInfo.submitOptionsOverride = frm.submitOptionsOverride.value;
7372 06 Oct 23 nicklas 431     }
4661 29 Jan 18 nicklas 432     submitInfo.debug = frm.debug.checked;
4661 29 Jan 18 nicklas 433     submitInfo.autoConfirm = frm.autoConfirm.checked;
4661 29 Jan 18 nicklas 434       
4661 29 Jan 18 nicklas 435     var alignedSequences = [];
4661 29 Jan 18 nicklas 436     submitInfo.alignedSequences = alignedSequences;
4661 29 Jan 18 nicklas 437       
4661 29 Jan 18 nicklas 438     for (var asNo = 0; asNo < frm.alignedSequences.length; asNo++)
4661 29 Jan 18 nicklas 439     {
4661 29 Jan 18 nicklas 440       if (frm.alignedSequences[asNo].selected) 
4661 29 Jan 18 nicklas 441       {
4661 29 Jan 18 nicklas 442         var as = {};
4661 29 Jan 18 nicklas 443         as.id = frm.alignedSequences[asNo].alignedSequences.id;
4661 29 Jan 18 nicklas 444         alignedSequences[alignedSequences.length] = as;
4661 29 Jan 18 nicklas 445       }
4661 29 Jan 18 nicklas 446     }
4661 29 Jan 18 nicklas 447
4663 29 Jan 18 nicklas 448     var url = '../StringTie.servlet?ID='+App.getSessionId();
4663 29 Jan 18 nicklas 449     url += '&cmd=StartStringTie';
4661 29 Jan 18 nicklas 450
4661 29 Jan 18 nicklas 451     Wizard.showLoadingAnimation('Performing registration...');
4661 29 Jan 18 nicklas 452     Wizard.asyncJsonRequest(url, stringtie.submissionResults, 'POST', JSON.stringify(submitInfo));
4661 29 Jan 18 nicklas 453   }
4661 29 Jan 18 nicklas 454   
4661 29 Jan 18 nicklas 455   stringtie.submissionResults = function(response)
4661 29 Jan 18 nicklas 456   {
4661 29 Jan 18 nicklas 457     Wizard.showFinalMessage(response.messages);
4661 29 Jan 18 nicklas 458     Doc.show('gorestart');
4661 29 Jan 18 nicklas 459   }
4661 29 Jan 18 nicklas 460
4661 29 Jan 18 nicklas 461   return stringtie;
4661 29 Jan 18 nicklas 462 }();
4661 29 Jan 18 nicklas 463
4663 29 Jan 18 nicklas 464 Doc.onLoad(StringTie.initPage);
4661 29 Jan 18 nicklas 465