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

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