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

Code
Comments
Other
Rev Date Author Line
7267 21 Jun 23 nicklas 1 var Ascat = function()
7267 21 Jun 23 nicklas 2 {
7267 21 Jun 23 nicklas 3   var ascat = {};
7267 21 Jun 23 nicklas 4   var debug = 0;
7267 21 Jun 23 nicklas 5   var selectionIsValid = false;
7267 21 Jun 23 nicklas 6   var subtypeAlignedSequences = null;
7267 21 Jun 23 nicklas 7   var annotationTypePipeline = null;
7267 21 Jun 23 nicklas 8   
7279 11 Aug 23 nicklas 9   var tauIsValid = true;
7279 11 Aug 23 nicklas 10   var rhoIsValid = true;
7279 11 Aug 23 nicklas 11   var psiIsValid = true;
7341 11 Sep 23 nicklas 12   var penaltyIsValid = true;
7341 11 Sep 23 nicklas 13   var minDepthIsValid = true;
7279 11 Aug 23 nicklas 14   
7267 21 Jun 23 nicklas 15   var clusterIsValid = false;
7267 21 Jun 23 nicklas 16   var manuallySelected = [];
7267 21 Jun 23 nicklas 17   
7267 21 Jun 23 nicklas 18   // Page initialization
7267 21 Jun 23 nicklas 19   ascat.initPage = function()
7267 21 Jun 23 nicklas 20   {
7267 21 Jun 23 nicklas 21     
7267 21 Jun 23 nicklas 22     // Step 1
7267 21 Jun 23 nicklas 23     Buttons.addClickHandler('btnSelectAlignedSequences', ascat.selectAlignedSequences);
7267 21 Jun 23 nicklas 24     Events.addEventHandler('alignedSequences', 'base-selected', ascat.setAlignedSequenceCallback);
7267 21 Jun 23 nicklas 25     Events.addEventHandler('alignedSequences', 'change', ascat.alignedSequencesOnChange);
7267 21 Jun 23 nicklas 26     Events.addEventHandler('step-1', 'wizard-validate', ascat.validateStep1);
7267 21 Jun 23 nicklas 27
7267 21 Jun 23 nicklas 28     // Step 2
7267 21 Jun 23 nicklas 29     Events.addEventHandler('step-2', 'wizard-initialize', ascat.initializeStep2);
7267 21 Jun 23 nicklas 30     Events.addEventHandler('step-2', 'wizard-validate', ascat.validateStep2);
7267 21 Jun 23 nicklas 31     Events.addEventHandler('clusters', 'change', ascat.clusterOnChange);
7372 06 Oct 23 nicklas 32     Events.addEventHandler('debug', 'change', ascat.debugOnChange);
7372 06 Oct 23 nicklas 33     Events.addEventHandler('override', 'change', ascat.overrideOnChange);
7267 21 Jun 23 nicklas 34     Events.addEventHandler('ascatSoftware', 'change', ascat.softwareOnChange);
7341 11 Sep 23 nicklas 35     Events.addEventHandler('imbalanceTest', 'change', ascat.imbalanceTestOnChange);
7341 11 Sep 23 nicklas 36     Events.addEventHandler('penalty', 'keypress', Events.integerOnly);
7341 11 Sep 23 nicklas 37     Events.addEventHandler('penalty', 'change', ascat.penaltyOnChange);
7341 11 Sep 23 nicklas 38     Events.addEventHandler('minDepth', 'keypress', Events.integerOnly);
7341 11 Sep 23 nicklas 39     Events.addEventHandler('minDepth', 'change', ascat.minDepthOnChange);
7279 11 Aug 23 nicklas 40     Events.addEventHandler('tau', 'keypress', Events.numberOnly);
7279 11 Aug 23 nicklas 41     Events.addEventHandler('tau', 'change', ascat.tauOnChange);
7279 11 Aug 23 nicklas 42     Events.addEventHandler('rho', 'keypress', Events.numberOnly);
7279 11 Aug 23 nicklas 43     Events.addEventHandler('rho', 'change', ascat.checkRhoAndPsi);
7279 11 Aug 23 nicklas 44     Events.addEventHandler('psi', 'keypress', Events.numberOnly);
7279 11 Aug 23 nicklas 45     Events.addEventHandler('psi', 'change', ascat.checkRhoAndPsi);
7290 18 Aug 23 nicklas 46     Buttons.addClickHandler('viewExistingResults', ascat.viewExistingResults);
7267 21 Jun 23 nicklas 47
7267 21 Jun 23 nicklas 48     // Navigation
7267 21 Jun 23 nicklas 49     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
7267 21 Jun 23 nicklas 50     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
7267 21 Jun 23 nicklas 51     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
7267 21 Jun 23 nicklas 52     Buttons.addClickHandler('goregister', Wizard.goRegister);
7267 21 Jun 23 nicklas 53     
7267 21 Jun 23 nicklas 54     // Final registration
7267 21 Jun 23 nicklas 55     Events.addEventHandler('wizard', 'wizard-submit', ascat.submit);
7267 21 Jun 23 nicklas 56
7267 21 Jun 23 nicklas 57     Wizard.showLoadingAnimation('Loading bioassays...');
7267 21 Jun 23 nicklas 58     var url = '../Ascat.servlet?ID='+App.getSessionId();
7267 21 Jun 23 nicklas 59     url += '&cmd=GetAlignedSequencesForAscatAnalysis';
7267 21 Jun 23 nicklas 60     Wizard.asyncJsonRequest(url, ascat.initializeStep1);
7267 21 Jun 23 nicklas 61   }
7267 21 Jun 23 nicklas 62   
7267 21 Jun 23 nicklas 63   // --- Step 1 -----------------------------------
7267 21 Jun 23 nicklas 64   ascat.initializeStep1 = function(response)
7267 21 Jun 23 nicklas 65   {
7267 21 Jun 23 nicklas 66     var alignedSequences = response.alignedSequences;
7267 21 Jun 23 nicklas 67     var frm = document.forms['reggie'];  
7267 21 Jun 23 nicklas 68
7267 21 Jun 23 nicklas 69     if (alignedSequences != null && alignedSequences.length > 0)
7267 21 Jun 23 nicklas 70     {
7269 26 Jun 23 nicklas 71       for (var tumorNo=0; tumorNo < alignedSequences.length; tumorNo++)
7267 21 Jun 23 nicklas 72       {
7269 26 Jun 23 nicklas 73         var tumor = alignedSequences[tumorNo];
7269 26 Jun 23 nicklas 74         var numNormals = tumor.normals.length;
7269 26 Jun 23 nicklas 75         for (var normalNo=0; normalNo < numNormals; normalNo++)
7269 26 Jun 23 nicklas 76         {
7269 26 Jun 23 nicklas 77           var normal = tumor.normals[normalNo];
7269 26 Jun 23 nicklas 78           var option = ascat.createListOption(tumorNo+1, numNormals == 1 ? null : normalNo+1, tumor, normal, tumor.DO_NOT_USE == null && normal.DO_NOT_USE==null);
7269 26 Jun 23 nicklas 79           frm.alignedSequences.options[frm.alignedSequences.length] = option;
7269 26 Jun 23 nicklas 80         }
7269 26 Jun 23 nicklas 81         if (numNormals == 0)
7269 26 Jun 23 nicklas 82         {
7269 26 Jun 23 nicklas 83           var option = ascat.createListOption(tumorNo+1, null, tumor, null, false);
7269 26 Jun 23 nicklas 84           frm.alignedSequences.options[frm.alignedSequences.length] = option;
7269 26 Jun 23 nicklas 85         }
7267 21 Jun 23 nicklas 86       }
7267 21 Jun 23 nicklas 87       Events.sendChangeEvent('alignedSequences');
7267 21 Jun 23 nicklas 88     }
7267 21 Jun 23 nicklas 89     else
7267 21 Jun 23 nicklas 90     {
7267 21 Jun 23 nicklas 91       Wizard.setInputStatus('alignedSequences', 'invalid', 'No new sequences available for processing');
7267 21 Jun 23 nicklas 92     }
7267 21 Jun 23 nicklas 93     
7267 21 Jun 23 nicklas 94     Doc.show('step-1');
7267 21 Jun 23 nicklas 95     Doc.show('gonext');
7267 21 Jun 23 nicklas 96
7267 21 Jun 23 nicklas 97     frm.alignedSequences.focus();
7267 21 Jun 23 nicklas 98   }
7267 21 Jun 23 nicklas 99   
7267 21 Jun 23 nicklas 100   ascat.validateStep1 = function(event)
7267 21 Jun 23 nicklas 101   {
7267 21 Jun 23 nicklas 102     if (!selectionIsValid) event.preventDefault();
7267 21 Jun 23 nicklas 103   }
7267 21 Jun 23 nicklas 104   
7267 21 Jun 23 nicklas 105   ascat.selectAlignedSequences = function()
7267 21 Jun 23 nicklas 106   {
7267 21 Jun 23 nicklas 107     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 108     if (frm.alignedSequences.disabled) return;
7267 21 Jun 23 nicklas 109     
7267 21 Jun 23 nicklas 110     if (subtypeAlignedSequences == null)
7267 21 Jun 23 nicklas 111     {
7267 21 Jun 23 nicklas 112       subtypeAlignedSequences = Reggie.getSubtypeInfo('ALIGNED_SEQUENCES');
7267 21 Jun 23 nicklas 113     }
7267 21 Jun 23 nicklas 114     if (annotationTypePipeline == null)
7267 21 Jun 23 nicklas 115     {
7267 21 Jun 23 nicklas 116       annotationTypePipeline = Reggie.getAnnotationTypeInfo('PIPELINE');
7267 21 Jun 23 nicklas 117     }
7267 21 Jun 23 nicklas 118     
7267 21 Jun 23 nicklas 119     // Reset list
7267 21 Jun 23 nicklas 120     manuallySelected = [];
7267 21 Jun 23 nicklas 121     var url = '&resetTemporary=1';
7267 21 Jun 23 nicklas 122     // Alignments in the 'DNA/Tumor/WGS' pipeline
7267 21 Jun 23 nicklas 123     url += '&tmpfilter:INT:itemSubtype='+subtypeAlignedSequences.id;
7267 21 Jun 23 nicklas 124     url += '&tmpfilter:STRING:'+encodeURIComponent('#')+annotationTypePipeline.id+'='+encodeURIComponent('DNA/Tumor/WGS');
7267 21 Jun 23 nicklas 125
7267 21 Jun 23 nicklas 126     Dialogs.selectItem('DERIVEDBIOASSAY', 'alignedSequences', 1, url);
7267 21 Jun 23 nicklas 127   }
7267 21 Jun 23 nicklas 128
7267 21 Jun 23 nicklas 129   ascat.setAlignedSequenceCallback = function(event)
7267 21 Jun 23 nicklas 130   {
7267 21 Jun 23 nicklas 131     var ms = event.detail;
7267 21 Jun 23 nicklas 132     
7267 21 Jun 23 nicklas 133     var opt = Reggie.getListOption('alignedSequences', ms.id);
7267 21 Jun 23 nicklas 134     if (opt)
7267 21 Jun 23 nicklas 135     {
7267 21 Jun 23 nicklas 136       opt.selected = true;
7267 21 Jun 23 nicklas 137     }
7267 21 Jun 23 nicklas 138     else
7267 21 Jun 23 nicklas 139     {
7267 21 Jun 23 nicklas 140       manuallySelected[manuallySelected.length] = ms.id;
7267 21 Jun 23 nicklas 141     }
7267 21 Jun 23 nicklas 142     
7267 21 Jun 23 nicklas 143     if (ms.remaining == 0 && manuallySelected.length > 0)
7267 21 Jun 23 nicklas 144     {
7267 21 Jun 23 nicklas 145       var url = '../Ascat.servlet?ID='+App.getSessionId();
7267 21 Jun 23 nicklas 146       url += '&cmd=GetAlignedSequencesForAscatAnalysis';
7267 21 Jun 23 nicklas 147       url += '&items='+manuallySelected.join(',');
7267 21 Jun 23 nicklas 148       Wizard.showLoadingAnimation('Loading bioassays...');
7267 21 Jun 23 nicklas 149       Wizard.asyncJsonRequest(url, ascat.manuallySelected);
7267 21 Jun 23 nicklas 150     }
7267 21 Jun 23 nicklas 151     else
7267 21 Jun 23 nicklas 152     {
7267 21 Jun 23 nicklas 153       Events.sendChangeEvent('alignedSequences');
7267 21 Jun 23 nicklas 154     }
7267 21 Jun 23 nicklas 155   }
7267 21 Jun 23 nicklas 156
7267 21 Jun 23 nicklas 157   ascat.manuallySelected = function(response)
7267 21 Jun 23 nicklas 158   {
7267 21 Jun 23 nicklas 159     var alignedSequences = response.alignedSequences;
7267 21 Jun 23 nicklas 160     var frm = document.forms['reggie'];  
7267 21 Jun 23 nicklas 161
7267 21 Jun 23 nicklas 162     if (alignedSequences != null && alignedSequences.length > 0)
7267 21 Jun 23 nicklas 163     {
7267 21 Jun 23 nicklas 164       var offset = frm.alignedSequences.length+1;
7269 26 Jun 23 nicklas 165       for (var tumorNo=0; tumorNo < alignedSequences.length; tumorNo++)
7267 21 Jun 23 nicklas 166       {
7269 26 Jun 23 nicklas 167         var tumor = alignedSequences[tumorNo];
7269 26 Jun 23 nicklas 168         var numNormals = tumor.normals.length;
7269 26 Jun 23 nicklas 169         for (var normalNo=0; normalNo < numNormals; normalNo++)
7269 26 Jun 23 nicklas 170         {
7269 26 Jun 23 nicklas 171           var normal = tumor.normals[normalNo];
7269 26 Jun 23 nicklas 172           var option = ascat.createListOption(tumorNo+offset, numNormals == 1 ? null : normalNo+1, tumor, normal, tumor.DO_NOT_USE == null && normal.DO_NOT_USE==null);
7269 26 Jun 23 nicklas 173           frm.alignedSequences.options[frm.alignedSequences.length] = option;
7269 26 Jun 23 nicklas 174         }
7269 26 Jun 23 nicklas 175         if (numNormals == 0)
7269 26 Jun 23 nicklas 176         {
7269 26 Jun 23 nicklas 177           var option = ascat.createListOption(tumorNo+offset, null, tumor, null, false);
7269 26 Jun 23 nicklas 178           frm.alignedSequences.options[frm.alignedSequences.length] = option;
7269 26 Jun 23 nicklas 179         }
7267 21 Jun 23 nicklas 180       }
7267 21 Jun 23 nicklas 181       Events.sendChangeEvent('alignedSequences');
7267 21 Jun 23 nicklas 182     }
7267 21 Jun 23 nicklas 183   }
7267 21 Jun 23 nicklas 184
7269 26 Jun 23 nicklas 185   ascat.createListOption = function(indexTumor, indexNormal, tumor, normal, selected)
7267 21 Jun 23 nicklas 186   {
7267 21 Jun 23 nicklas 187     var tooltip = null;
7294 23 Aug 23 nicklas 188     var name = indexTumor+(indexNormal!=null ? '.'+indexNormal : '')+': ' + tumor.name+' - '+(normal ? normal.name : 'missing normal');
7267 21 Jun 23 nicklas 189     
7269 26 Jun 23 nicklas 190     if (!normal)
7267 21 Jun 23 nicklas 191     {
7269 26 Jun 23 nicklas 192       tooltip = 'Could not find a matching normal alignment';
7269 26 Jun 23 nicklas 193     }
7269 26 Jun 23 nicklas 194     else if (tumor.DO_NOT_USE || normal.DO_NOT_USE)
7269 26 Jun 23 nicklas 195     {
7267 21 Jun 23 nicklas 196       name += ' [DoNotUse]';
7269 26 Jun 23 nicklas 197       var dn = tumor.DO_NOT_USE ? tumor : normal;
7269 26 Jun 23 nicklas 198       tooltip = '['+(dn==tumor?'Tumor':'Normal')+'] DoNotUse-'+Strings.encodeTags(dn.DO_NOT_USE+': '+dn.DO_NOT_USE_COMMENT);
7267 21 Jun 23 nicklas 199     }
7269 26 Jun 23 nicklas 200     else if (tumor.AutoProcess == 'ReProcess')
7267 21 Jun 23 nicklas 201     {
7267 21 Jun 23 nicklas 202       name += ' [R]';
7267 21 Jun 23 nicklas 203     }
7267 21 Jun 23 nicklas 204     
7269 26 Jun 23 nicklas 205     var option = new Option(name, tumor.id, false, selected);
7267 21 Jun 23 nicklas 206     if (tooltip) option.title = tooltip;
7269 26 Jun 23 nicklas 207     option.tumor = tumor;
7269 26 Jun 23 nicklas 208     option.normal = normal;
7269 26 Jun 23 nicklas 209     if (!normal) option.disabled = true;
7267 21 Jun 23 nicklas 210     return option;
7267 21 Jun 23 nicklas 211   }
7267 21 Jun 23 nicklas 212   
7267 21 Jun 23 nicklas 213   ascat.alignedSequencesOnChange = function()
7267 21 Jun 23 nicklas 214   {
7267 21 Jun 23 nicklas 215     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 216     selectionIsValid = false;
7290 18 Aug 23 nicklas 217     var numSelected = 0;
7267 21 Jun 23 nicklas 218     var numDoNotUse = 0;
7269 26 Jun 23 nicklas 219     var invalidSelection = null;
7267 21 Jun 23 nicklas 220     Wizard.setInputStatus('alignedSequences');
7267 21 Jun 23 nicklas 221     Wizard.hideGoNextConfirmation();
7267 21 Jun 23 nicklas 222     
7267 21 Jun 23 nicklas 223     for (var asNo = 0; asNo < frm.alignedSequences.length; asNo++)
7267 21 Jun 23 nicklas 224     {
7267 21 Jun 23 nicklas 225       if (frm.alignedSequences[asNo].selected) 
7267 21 Jun 23 nicklas 226       {
7267 21 Jun 23 nicklas 227         numSelected++;
7269 26 Jun 23 nicklas 228         var tumor = frm.alignedSequences[asNo].tumor;
7269 26 Jun 23 nicklas 229         var normal = frm.alignedSequences[asNo].normal;
7269 26 Jun 23 nicklas 230         if (tumor.DO_NOT_USE || normal && normal.DO_NOT_USE) numDoNotUse++;
7269 26 Jun 23 nicklas 231         if (!normal)
7267 21 Jun 23 nicklas 232         {
7269 26 Jun 23 nicklas 233           invalidSelection = Strings.encodeTags(tumor.name+' has not matched normal alignment');
7267 21 Jun 23 nicklas 234         }
7269 26 Jun 23 nicklas 235         else if (tumor.pipeline && tumor.pipeline != 'DNA/Tumor/WGS')
7269 26 Jun 23 nicklas 236         {
7269 26 Jun 23 nicklas 237           invalidSelection = Strings.encodeTags(tumor.name+' ('+tumor.pipeline)+') is not intended for the DNA/Tumor/WGS pipeline.';
7269 26 Jun 23 nicklas 238         }
7267 21 Jun 23 nicklas 239       }
7267 21 Jun 23 nicklas 240     }
7267 21 Jun 23 nicklas 241     
7267 21 Jun 23 nicklas 242     if (numSelected == 0)
7267 21 Jun 23 nicklas 243     {
7267 21 Jun 23 nicklas 244       Wizard.setInputStatus('alignedSequences', 'invalid', 'Select at least one item');
7267 21 Jun 23 nicklas 245       return;
7267 21 Jun 23 nicklas 246     }
7269 26 Jun 23 nicklas 247     if (invalidSelection) 
7267 21 Jun 23 nicklas 248     {
7269 26 Jun 23 nicklas 249       Wizard.setInputStatus('alignedSequences', 'invalid', invalidSelection);
7267 21 Jun 23 nicklas 250       return;
7267 21 Jun 23 nicklas 251     }
7267 21 Jun 23 nicklas 252     selectionIsValid = true;
7267 21 Jun 23 nicklas 253     
7267 21 Jun 23 nicklas 254     if (numDoNotUse > 0)
7267 21 Jun 23 nicklas 255     {
7267 21 Jun 23 nicklas 256       Wizard.setInputStatus('alignedSequences', 'warning', numDoNotUse + ' selected items marked as DoNotUse');
7267 21 Jun 23 nicklas 257       Wizard.showGoNextConfirmation(true, 'Confirm ' + numDoNotUse + ' items marked as DoNotUse');
7267 21 Jun 23 nicklas 258     }
7267 21 Jun 23 nicklas 259     else
7267 21 Jun 23 nicklas 260     {
7267 21 Jun 23 nicklas 261       Wizard.setInputStatus('alignedSequences', 'valid');
7267 21 Jun 23 nicklas 262     }
7267 21 Jun 23 nicklas 263   }
7267 21 Jun 23 nicklas 264
7267 21 Jun 23 nicklas 265   // --- Step 2 -----------------------------------
7267 21 Jun 23 nicklas 266   ascat.initializeStep2 = function()
7267 21 Jun 23 nicklas 267   {
7267 21 Jun 23 nicklas 268     Wizard.setCurrentStep(2);
7267 21 Jun 23 nicklas 269     
7267 21 Jun 23 nicklas 270     // Check debug by default if debug is set or not on a secure server (=production server)
7267 21 Jun 23 nicklas 271     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 272     frm.debug.checked = debug || location.protocol != 'https:';
7267 21 Jun 23 nicklas 273
7267 21 Jun 23 nicklas 274     Reggie.loadSoftware('COPY_NUMBER_SOFTWARE', 'ascatSoftware', 'PARAMETER_SET');
7267 21 Jun 23 nicklas 275     
7267 21 Jun 23 nicklas 276     // Load clusters
7267 21 Jun 23 nicklas 277     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=ascat';
7267 21 Jun 23 nicklas 278     Doc.addClass('clusters', 'list-loading');
7267 21 Jun 23 nicklas 279     frm.clusters[0] = new Option('loading...');
7267 21 Jun 23 nicklas 280     Wizard.asyncJsonRequest(url, ascat.clustersLoaded);
7290 18 Aug 23 nicklas 281
7290 18 Aug 23 nicklas 282     // Check if only a single item is selected
7290 18 Aug 23 nicklas 283     var numSelected = 0;
7290 18 Aug 23 nicklas 284     var firstSelected = 0;
7290 18 Aug 23 nicklas 285     for (var asNo = 0; asNo < frm.alignedSequences.length; asNo++)
7290 18 Aug 23 nicklas 286     {
7290 18 Aug 23 nicklas 287       if (frm.alignedSequences[asNo].selected) 
7290 18 Aug 23 nicklas 288       {
7290 18 Aug 23 nicklas 289         numSelected++;
7290 18 Aug 23 nicklas 290         if (numSelected == 1) firstSelected = asNo;
7290 18 Aug 23 nicklas 291       }
7290 18 Aug 23 nicklas 292     }
7279 11 Aug 23 nicklas 293     
7290 18 Aug 23 nicklas 294     if (numSelected == 1)
7279 11 Aug 23 nicklas 295     {
7290 18 Aug 23 nicklas 296       // Load information about existing results
7290 18 Aug 23 nicklas 297       var tumor = frm.alignedSequences[firstSelected].tumor;
7290 18 Aug 23 nicklas 298       var normal = frm.alignedSequences[firstSelected].normal;
7290 18 Aug 23 nicklas 299       var url = '../Ascat.servlet?ID='+App.getSessionId();
7290 18 Aug 23 nicklas 300       url += '&cmd=LoadExistingResults';
7290 18 Aug 23 nicklas 301       url += '&tumorId='+tumor.id+'&normalId='+normal.id;
7290 18 Aug 23 nicklas 302       Wizard.asyncJsonRequest(url, ascat.existingResultsLoaded);
7290 18 Aug 23 nicklas 303     }
7290 18 Aug 23 nicklas 304     else
7290 18 Aug 23 nicklas 305     {
7290 18 Aug 23 nicklas 306       // Disable 'rho' and 'psi' options if more than one item is selected
7279 11 Aug 23 nicklas 307       frm.rho.disabled = true;
7279 11 Aug 23 nicklas 308       frm.psi.disabled = true;
7279 11 Aug 23 nicklas 309       Wizard.setInputStatus('rho', '', 'Disabled since more than one item is selected');
7279 11 Aug 23 nicklas 310       Wizard.setInputStatus('psi', '', 'Disabled since more than one item is selected');
7279 11 Aug 23 nicklas 311     }
7341 11 Sep 23 nicklas 312     
7341 11 Sep 23 nicklas 313     ascat.imbalanceTestOnChange();
7267 21 Jun 23 nicklas 314     Doc.show('goregister');
7267 21 Jun 23 nicklas 315     Doc.show('gocancel');
7267 21 Jun 23 nicklas 316   }
7267 21 Jun 23 nicklas 317   
7290 18 Aug 23 nicklas 318   ascat.existingResultsLoaded = function(response)
7290 18 Aug 23 nicklas 319   {
7290 18 Aug 23 nicklas 320     var existingResults = response.ascatItems;
7290 18 Aug 23 nicklas 321     if (existingResults && existingResults.length > 0)
7290 18 Aug 23 nicklas 322     {
7290 18 Aug 23 nicklas 323       Data.set('viewExistingResults', 'tumor-id', response.tumor.id);
7290 18 Aug 23 nicklas 324       Data.set('viewExistingResults', 'normal-id', response.normal.id);
7290 18 Aug 23 nicklas 325       Doc.element('numExistingResults').innerHTML = existingResults.length;
7290 18 Aug 23 nicklas 326       Doc.show('existingResults');
7290 18 Aug 23 nicklas 327     }
7290 18 Aug 23 nicklas 328   }
7290 18 Aug 23 nicklas 329   
7290 18 Aug 23 nicklas 330   ascat.viewExistingResults = function(event)
7290 18 Aug 23 nicklas 331   {
7290 18 Aug 23 nicklas 332     var tumorId = Data.get(event.currentTarget, 'tumor-id');
7290 18 Aug 23 nicklas 333     var normalId = Data.get(event.currentTarget, 'normal-id');
7290 18 Aug 23 nicklas 334     
7290 18 Aug 23 nicklas 335     var url = 'view_existing_ascat_results.jsp?ID='+App.getSessionId();
7290 18 Aug 23 nicklas 336     url += '&tumorId='+tumorId;
7290 18 Aug 23 nicklas 337     url += '&normalId='+normalId;
7290 18 Aug 23 nicklas 338     Dialogs.openPopup(url, 'ViewAscatResults', 1500, 800);
7290 18 Aug 23 nicklas 339   }
7290 18 Aug 23 nicklas 340   
7267 21 Jun 23 nicklas 341   ascat.validateStep2 = function(event)
7267 21 Jun 23 nicklas 342   {
7279 11 Aug 23 nicklas 343     var valid = tauIsValid;
7279 11 Aug 23 nicklas 344     valid &= rhoIsValid;
7279 11 Aug 23 nicklas 345     valid &= psiIsValid;
7341 11 Sep 23 nicklas 346     valid &= penaltyIsValid;
7279 11 Aug 23 nicklas 347     valid &= clusterIsValid;
7279 11 Aug 23 nicklas 348     if (!valid) event.preventDefault();
7267 21 Jun 23 nicklas 349   }
7267 21 Jun 23 nicklas 350   
7267 21 Jun 23 nicklas 351   ascat.clustersLoaded = function(response)
7267 21 Jun 23 nicklas 352   {
7267 21 Jun 23 nicklas 353     Doc.removeClass('clusters', 'list-loading');
7267 21 Jun 23 nicklas 354     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 355     var clusters = response.hosts;
7267 21 Jun 23 nicklas 356     frm.clusters.length = 0;
7267 21 Jun 23 nicklas 357     for (var i = 0; i < clusters.length; i++)
7267 21 Jun 23 nicklas 358     {
7267 21 Jun 23 nicklas 359       var cl = clusters[i];
7267 21 Jun 23 nicklas 360       var option = new Option(cl.connection.name, cl.id);
7267 21 Jun 23 nicklas 361       option.cluster = cl;
7267 21 Jun 23 nicklas 362       frm.clusters[frm.clusters.length] = option;
7267 21 Jun 23 nicklas 363       Wizard.setInputStatus('clusters', 'valid');
7267 21 Jun 23 nicklas 364       clusterIsValid = true;
7267 21 Jun 23 nicklas 365     }
7267 21 Jun 23 nicklas 366     if (frm.clusters.length == 0)
7267 21 Jun 23 nicklas 367     {
7267 21 Jun 23 nicklas 368       Wizard.setInputStatus('clusters', 'invalid', 'No available clusters');
7267 21 Jun 23 nicklas 369       clusterIsValid = false;
7267 21 Jun 23 nicklas 370     }
7267 21 Jun 23 nicklas 371     else
7267 21 Jun 23 nicklas 372     {
7267 21 Jun 23 nicklas 373       ascat.clusterOnChange();
7267 21 Jun 23 nicklas 374     }
7267 21 Jun 23 nicklas 375   }
7267 21 Jun 23 nicklas 376   
7267 21 Jun 23 nicklas 377   ascat.softwareOnChange = function(event)
7267 21 Jun 23 nicklas 378   {
7267 21 Jun 23 nicklas 379     var target = event.currentTarget;
7267 21 Jun 23 nicklas 380     var item = target[target.selectedIndex].item;
7267 21 Jun 23 nicklas 381     if (!item) item = {};
7267 21 Jun 23 nicklas 382     
7267 21 Jun 23 nicklas 383     Doc.element(target.id+'.parameterSet').innerHTML = Strings.encodeTags(item.ParameterSet || 'default');
7267 21 Jun 23 nicklas 384     Doc.element(target.id+'.description').innerHTML = Strings.encodeTags(item.description);
7267 21 Jun 23 nicklas 385     Wizard.setInputStatus(target.id, 'valid');
7267 21 Jun 23 nicklas 386
7267 21 Jun 23 nicklas 387     if (item.ParameterSet)
7267 21 Jun 23 nicklas 388     {
7267 21 Jun 23 nicklas 389       var url = '../Install.servlet?ID='+App.getSessionId();
7267 21 Jun 23 nicklas 390       url += '&cmd=GetParameterSetInfo';
7267 21 Jun 23 nicklas 391       url += '&parameterSet='+encodeURIComponent(item.ParameterSet);
7267 21 Jun 23 nicklas 392       url += '&targetId='+target.id;
7267 21 Jun 23 nicklas 393       Wizard.asyncJsonRequest(url, ascat.parameterSetInfoLoaded);
7267 21 Jun 23 nicklas 394     }
7372 06 Oct 23 nicklas 395     ascat.updateSubmitOptions();
7267 21 Jun 23 nicklas 396   }
7267 21 Jun 23 nicklas 397   
7267 21 Jun 23 nicklas 398   ascat.parameterSetInfoLoaded = function(response)
7267 21 Jun 23 nicklas 399   {
7267 21 Jun 23 nicklas 400     if (!response.parameters || response.parameters.length == 0)
7267 21 Jun 23 nicklas 401     {
7267 21 Jun 23 nicklas 402       Wizard.setInputStatus(response.targetId, 'warning', 'Can\'t find \'' + Strings.encodeTags(response.parameterSet) + '\' parameter set in reggie-config.xml');
7267 21 Jun 23 nicklas 403     }
7267 21 Jun 23 nicklas 404   }
7267 21 Jun 23 nicklas 405   
7341 11 Sep 23 nicklas 406   ascat.imbalanceTestOnChange = function()
7341 11 Sep 23 nicklas 407   {
7341 11 Sep 23 nicklas 408     var frm = document.forms['reggie'];
7341 11 Sep 23 nicklas 409     var imbalanceTest = frm.imbalanceTest[frm.imbalanceTest.selectedIndex];
7341 11 Sep 23 nicklas 410     var tauMin = Data.get(imbalanceTest, 'tau-min');
7341 11 Sep 23 nicklas 411     var tauMax = Data.get(imbalanceTest, 'tau-max');
7341 11 Sep 23 nicklas 412     var tauDefault = Data.get(imbalanceTest, 'tau');
7341 11 Sep 23 nicklas 413     Doc.element('tau-range').innerHTML = tauMin+' â‰¤ Ï„ â‰¤ '+tauMax;
7341 11 Sep 23 nicklas 414     frm.tau.placeholder = tauDefault;
7341 11 Sep 23 nicklas 415     ascat.tauOnChange();
7341 11 Sep 23 nicklas 416   }
7341 11 Sep 23 nicklas 417   
7341 11 Sep 23 nicklas 418   ascat.penaltyOnChange = function()
7341 11 Sep 23 nicklas 419   {
7341 11 Sep 23 nicklas 420     var frm = document.forms['reggie'];
7341 11 Sep 23 nicklas 421     Wizard.setInputStatus('penalty');
7341 11 Sep 23 nicklas 422     penaltyIsValid = false;
7341 11 Sep 23 nicklas 423     
7341 11 Sep 23 nicklas 424     if (frm.penalty.value != '')
7341 11 Sep 23 nicklas 425     {
7341 11 Sep 23 nicklas 426       var penalty = parseInt(frm.penalty.value);
7341 11 Sep 23 nicklas 427       if (isNaN(penalty) || penalty <= 0)
7341 11 Sep 23 nicklas 428       {
7341 11 Sep 23 nicklas 429         Wizard.setInputStatus('penalty', 'invalid', 'Please enter a number &gt;0');
7341 11 Sep 23 nicklas 430         return;
7341 11 Sep 23 nicklas 431       }
7341 11 Sep 23 nicklas 432       frm.penalty.value = penalty;
7341 11 Sep 23 nicklas 433     }
7341 11 Sep 23 nicklas 434     Wizard.setInputStatus('penalty', 'valid');
7341 11 Sep 23 nicklas 435     penaltyIsValid = true;
7341 11 Sep 23 nicklas 436   }
7341 11 Sep 23 nicklas 437
7341 11 Sep 23 nicklas 438   ascat.minDepthOnChange = function()
7341 11 Sep 23 nicklas 439   {
7341 11 Sep 23 nicklas 440     var frm = document.forms['reggie'];
7341 11 Sep 23 nicklas 441     Wizard.setInputStatus('minDepth');
7341 11 Sep 23 nicklas 442     minDepthIsValid = false;
7341 11 Sep 23 nicklas 443     
7341 11 Sep 23 nicklas 444     if (frm.minDepth.value != '')
7341 11 Sep 23 nicklas 445     {
7341 11 Sep 23 nicklas 446       var minDepth = parseInt(frm.minDepth.value);
7341 11 Sep 23 nicklas 447       if (isNaN(minDepth) || minDepth <= 0)
7341 11 Sep 23 nicklas 448       {
7341 11 Sep 23 nicklas 449         Wizard.setInputStatus('minDepth', 'invalid', 'Please enter a number &gt;0');
7341 11 Sep 23 nicklas 450         return;
7341 11 Sep 23 nicklas 451       }
7341 11 Sep 23 nicklas 452       frm.minDepth.value = minDepth;
7341 11 Sep 23 nicklas 453     }
7341 11 Sep 23 nicklas 454     Wizard.setInputStatus('minDepth', 'valid');
7341 11 Sep 23 nicklas 455     minDepthIsValid = true;
7341 11 Sep 23 nicklas 456   }
7341 11 Sep 23 nicklas 457
7279 11 Aug 23 nicklas 458   ascat.tauOnChange = function()
7279 11 Aug 23 nicklas 459   {
7279 11 Aug 23 nicklas 460     var frm = document.forms['reggie'];
7279 11 Aug 23 nicklas 461     Wizard.setInputStatus('tau');
7279 11 Aug 23 nicklas 462     tauIsValid = false;
7279 11 Aug 23 nicklas 463     
7279 11 Aug 23 nicklas 464     if (frm.tau.value != '')
7279 11 Aug 23 nicklas 465     {
7341 11 Sep 23 nicklas 466       var imbalanceTest = frm.imbalanceTest[frm.imbalanceTest.selectedIndex];
7341 11 Sep 23 nicklas 467       var tauMin = Data.float(imbalanceTest, 'tau-min');
7341 11 Sep 23 nicklas 468       var tauMax = Data.float(imbalanceTest, 'tau-max');
7279 11 Aug 23 nicklas 469       var tau = parseFloat(frm.tau.value);
7341 11 Sep 23 nicklas 470       if (isNaN(tau) || tau < tauMin || tau > tauMax)
7279 11 Aug 23 nicklas 471       {
7341 11 Sep 23 nicklas 472         Wizard.setInputStatus('tau', 'invalid', 'Please enter a number between '+tauMin+' and '+tauMax);
7279 11 Aug 23 nicklas 473         return;
7279 11 Aug 23 nicklas 474       }
7341 11 Sep 23 nicklas 475       frm.tau.value = tau;
7279 11 Aug 23 nicklas 476     }
7279 11 Aug 23 nicklas 477     Wizard.setInputStatus('tau', 'valid');
7279 11 Aug 23 nicklas 478     tauIsValid = true;
7279 11 Aug 23 nicklas 479   }
7279 11 Aug 23 nicklas 480   
7279 11 Aug 23 nicklas 481   ascat.checkRhoAndPsi = function()
7279 11 Aug 23 nicklas 482   {
7279 11 Aug 23 nicklas 483     var frm = document.forms['reggie'];
7279 11 Aug 23 nicklas 484     
7279 11 Aug 23 nicklas 485     Wizard.setInputStatus('rho');
7279 11 Aug 23 nicklas 486     Wizard.setInputStatus('psi');
7279 11 Aug 23 nicklas 487     rhoIsValid = false;
7279 11 Aug 23 nicklas 488     psiIsValid = false;
7279 11 Aug 23 nicklas 489
7279 11 Aug 23 nicklas 490     var haveRho = frm.rho.value != '';
7279 11 Aug 23 nicklas 491     var havePsi = frm.psi.value != '';
7279 11 Aug 23 nicklas 492     if (haveRho != havePsi)
7279 11 Aug 23 nicklas 493     {
7279 11 Aug 23 nicklas 494       // Only one value has been specified
7279 11 Aug 23 nicklas 495       Wizard.setInputStatus('rho', 'invalid', 'Both rho and psi must be specified');
7279 11 Aug 23 nicklas 496       Wizard.setInputStatus('psi', 'invalid', 'Both rho and psi must be specified');
7279 11 Aug 23 nicklas 497       return;
7279 11 Aug 23 nicklas 498     }
7279 11 Aug 23 nicklas 499
7279 11 Aug 23 nicklas 500     if (haveRho)
7279 11 Aug 23 nicklas 501     {
7279 11 Aug 23 nicklas 502       var rho = parseFloat(frm.rho.value);
7279 11 Aug 23 nicklas 503       rhoIsValid = !isNaN(rho) && rho >= 0 && rho <= 1;
7279 11 Aug 23 nicklas 504     }
7279 11 Aug 23 nicklas 505     else
7279 11 Aug 23 nicklas 506     {
7279 11 Aug 23 nicklas 507       rhoIsValid = true;
7279 11 Aug 23 nicklas 508     }
7279 11 Aug 23 nicklas 509     if (havePsi)
7279 11 Aug 23 nicklas 510     {
7279 11 Aug 23 nicklas 511       var psi = parseFloat(frm.psi.value);
7279 11 Aug 23 nicklas 512       psiIsValid = !isNaN(psi) && psi >= 0 && psi <= 6;
7279 11 Aug 23 nicklas 513     }
7279 11 Aug 23 nicklas 514     else
7279 11 Aug 23 nicklas 515     {
7279 11 Aug 23 nicklas 516       psiIsValid = true;  
7279 11 Aug 23 nicklas 517     }
7279 11 Aug 23 nicklas 518
7279 11 Aug 23 nicklas 519     if (rhoIsValid)
7279 11 Aug 23 nicklas 520     {
7279 11 Aug 23 nicklas 521       Wizard.setInputStatus('rho', 'valid');
7279 11 Aug 23 nicklas 522     }
7279 11 Aug 23 nicklas 523     else
7279 11 Aug 23 nicklas 524     {
7279 11 Aug 23 nicklas 525       Wizard.setInputStatus('rho', 'invalid', 'Please enter a number between 0 and 1');
7279 11 Aug 23 nicklas 526     }
7279 11 Aug 23 nicklas 527     
7279 11 Aug 23 nicklas 528     if (psiIsValid)
7279 11 Aug 23 nicklas 529     {
7279 11 Aug 23 nicklas 530       Wizard.setInputStatus('psi', 'valid');
7279 11 Aug 23 nicklas 531     }
7279 11 Aug 23 nicklas 532     else
7279 11 Aug 23 nicklas 533     {
7279 11 Aug 23 nicklas 534       Wizard.setInputStatus('psi', 'invalid', 'Please enter a number between 0 and 6');
7279 11 Aug 23 nicklas 535     }
7279 11 Aug 23 nicklas 536   }
7279 11 Aug 23 nicklas 537
7267 21 Jun 23 nicklas 538   ascat.clusterOnChange = function()
7267 21 Jun 23 nicklas 539   {
7267 21 Jun 23 nicklas 540     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 541     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
7267 21 Jun 23 nicklas 542     if (cluster.priorities && cluster.priorities.length > 0)
7267 21 Jun 23 nicklas 543     {
7267 21 Jun 23 nicklas 544       frm.priority.length = 0;
7267 21 Jun 23 nicklas 545       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
7267 21 Jun 23 nicklas 546       {
7267 21 Jun 23 nicklas 547         var p = cluster.priorities[pNo];
7267 21 Jun 23 nicklas 548         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
7267 21 Jun 23 nicklas 549       }
7267 21 Jun 23 nicklas 550       Doc.show('job-priority');
7267 21 Jun 23 nicklas 551     }
7267 21 Jun 23 nicklas 552     else
7267 21 Jun 23 nicklas 553     {
7267 21 Jun 23 nicklas 554       Doc.hide('job-priority');
7267 21 Jun 23 nicklas 555     }
7267 21 Jun 23 nicklas 556     if (cluster.partitions && cluster.partitions.length > 0)
7267 21 Jun 23 nicklas 557     {
7267 21 Jun 23 nicklas 558       frm.partition.length = 0;
7267 21 Jun 23 nicklas 559       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
7267 21 Jun 23 nicklas 560       {
7267 21 Jun 23 nicklas 561         var p = cluster.partitions[pNo];
7267 21 Jun 23 nicklas 562         var title = p.name;
7267 21 Jun 23 nicklas 563         if (p.description) title += ' ('+p.description+')';
7267 21 Jun 23 nicklas 564         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
7267 21 Jun 23 nicklas 565       }
7267 21 Jun 23 nicklas 566       Doc.show('job-partition');
7267 21 Jun 23 nicklas 567     }
7267 21 Jun 23 nicklas 568     else
7267 21 Jun 23 nicklas 569     {
7267 21 Jun 23 nicklas 570       Doc.hide('job-partition');
7267 21 Jun 23 nicklas 571     }
7372 06 Oct 23 nicklas 572     ascat.updateSubmitOptions();
7267 21 Jun 23 nicklas 573   }
7372 06 Oct 23 nicklas 574   
7372 06 Oct 23 nicklas 575   ascat.debugOnChange = function()
7372 06 Oct 23 nicklas 576   {
7372 06 Oct 23 nicklas 577     ascat.updateSubmitOptions();
7372 06 Oct 23 nicklas 578   }
7372 06 Oct 23 nicklas 579   
7372 06 Oct 23 nicklas 580   ascat.updateSubmitOptions = function()
7372 06 Oct 23 nicklas 581   {
7372 06 Oct 23 nicklas 582     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 583     var config = frm.clusters[frm.clusters.selectedIndex]?.cluster?.config?.ascat;
7372 06 Oct 23 nicklas 584     if (config)
7372 06 Oct 23 nicklas 585     {
7372 06 Oct 23 nicklas 586       var parameterSet = frm.ascatSoftware[frm.ascatSoftware.selectedIndex]?.item?.ParameterSet;
7372 06 Oct 23 nicklas 587       Doc.element('submitOptions').innerHTML = Reggie.getSubmitOptions(config, frm.debug.checked, parameterSet);
7372 06 Oct 23 nicklas 588       frm.override.disabled = false;
7372 06 Oct 23 nicklas 589     }
7372 06 Oct 23 nicklas 590   }
7372 06 Oct 23 nicklas 591   
7372 06 Oct 23 nicklas 592   ascat.overrideOnChange = function()
7372 06 Oct 23 nicklas 593   {
7372 06 Oct 23 nicklas 594     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 595     Doc.showHide('submitOptions', !frm.override.checked);
7372 06 Oct 23 nicklas 596     Doc.showHide('submitOptionsOverride', frm.override.checked);
7372 06 Oct 23 nicklas 597     if (frm.submitOptionsOverride.value=='') 
7372 06 Oct 23 nicklas 598     {
7372 06 Oct 23 nicklas 599       frm.submitOptionsOverride.value = Doc.element('submitOptions').innerHTML;
7372 06 Oct 23 nicklas 600     }
7372 06 Oct 23 nicklas 601   }
7267 21 Jun 23 nicklas 602
7267 21 Jun 23 nicklas 603   ascat.submit = function()
7267 21 Jun 23 nicklas 604   {
7267 21 Jun 23 nicklas 605     var frm = document.forms['reggie'];
7267 21 Jun 23 nicklas 606       
7267 21 Jun 23 nicklas 607     var submitInfo = {};
7267 21 Jun 23 nicklas 608     submitInfo.ascatSoftware = parseInt(frm.ascatSoftware.value);
7341 11 Sep 23 nicklas 609     submitInfo.imbalanceTest = frm.imbalanceTest.value;
7279 11 Aug 23 nicklas 610     submitInfo.tau = parseFloat(frm.tau.value);
7279 11 Aug 23 nicklas 611     submitInfo.rho = parseFloat(frm.rho.value);
7279 11 Aug 23 nicklas 612     submitInfo.psi = parseFloat(frm.psi.value);
7341 11 Sep 23 nicklas 613     submitInfo.penalty = parseInt(frm.penalty.value);
7341 11 Sep 23 nicklas 614     submitInfo.minDepth = parseInt(frm.minDepth.value);
7267 21 Jun 23 nicklas 615     submitInfo.cluster = frm.clusters.value;
7267 21 Jun 23 nicklas 616     if (frm.priority.selectedIndex >= 0)
7267 21 Jun 23 nicklas 617     {
7267 21 Jun 23 nicklas 618       submitInfo.priority = parseInt(frm.priority.value);
7267 21 Jun 23 nicklas 619     }
7267 21 Jun 23 nicklas 620     if (frm.partition.selectedIndex >= 0)
7267 21 Jun 23 nicklas 621     {
7267 21 Jun 23 nicklas 622       submitInfo.partition = frm.partition.value;
7267 21 Jun 23 nicklas 623     }
7267 21 Jun 23 nicklas 624     submitInfo.debug = frm.debug.checked;
7372 06 Oct 23 nicklas 625     if (frm.override.checked)
7372 06 Oct 23 nicklas 626     {
7372 06 Oct 23 nicklas 627       submitInfo.submitOptionsOverride = frm.submitOptionsOverride.value;
7372 06 Oct 23 nicklas 628     }
7290 18 Aug 23 nicklas 629     // Auto-confirm is not supported since results need to be manually inspected
7290 18 Aug 23 nicklas 630     // submitInfo.autoConfirm = frm.autoConfirm.checked;
7267 21 Jun 23 nicklas 631       
7267 21 Jun 23 nicklas 632     var alignedSequences = [];
7267 21 Jun 23 nicklas 633     submitInfo.alignedSequences = alignedSequences;
7267 21 Jun 23 nicklas 634       
7267 21 Jun 23 nicklas 635     for (var asNo = 0; asNo < frm.alignedSequences.length; asNo++)
7267 21 Jun 23 nicklas 636     {
7267 21 Jun 23 nicklas 637       if (frm.alignedSequences[asNo].selected) 
7267 21 Jun 23 nicklas 638       {
7269 26 Jun 23 nicklas 639         var tumor = frm.alignedSequences[asNo].tumor;
7269 26 Jun 23 nicklas 640         var normal = frm.alignedSequences[asNo].normal;
7269 26 Jun 23 nicklas 641         
7269 26 Jun 23 nicklas 642         var pair = {};
7269 26 Jun 23 nicklas 643         pair.tumorId = tumor.id;
7269 26 Jun 23 nicklas 644         pair.normalId = normal.id;
7269 26 Jun 23 nicklas 645         alignedSequences[alignedSequences.length] = pair;
7267 21 Jun 23 nicklas 646       }
7267 21 Jun 23 nicklas 647     }
7267 21 Jun 23 nicklas 648
7267 21 Jun 23 nicklas 649     var url = '../Ascat.servlet?ID='+App.getSessionId();
7267 21 Jun 23 nicklas 650     url += '&cmd=StartAscatAnalysis';
7267 21 Jun 23 nicklas 651
7267 21 Jun 23 nicklas 652     Wizard.showLoadingAnimation('Performing registration...');
7267 21 Jun 23 nicklas 653     Wizard.asyncJsonRequest(url, ascat.submissionResults, 'POST', JSON.stringify(submitInfo));
7267 21 Jun 23 nicklas 654   }
7267 21 Jun 23 nicklas 655   
7267 21 Jun 23 nicklas 656   ascat.submissionResults = function(response)
7267 21 Jun 23 nicklas 657   {
7267 21 Jun 23 nicklas 658     Wizard.showFinalMessage(response.messages);
7267 21 Jun 23 nicklas 659     Doc.show('gorestart');
7267 21 Jun 23 nicklas 660   }
7267 21 Jun 23 nicklas 661
7267 21 Jun 23 nicklas 662   return ascat;
7267 21 Jun 23 nicklas 663 }();
7267 21 Jun 23 nicklas 664
7267 21 Jun 23 nicklas 665 Doc.onLoad(Ascat.initPage);
7267 21 Jun 23 nicklas 666