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

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