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

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