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

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