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

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