extensions/net.sf.basedb.meludi/trunk/resources/libprep/auto_select_dna.js

Code
Comments
Other
Rev Date Author Line
3449 28 Jul 15 olle 1 var AutoSelect = function()
3449 28 Jul 15 olle 2 {
3449 28 Jul 15 olle 3   var autoselect = {};
3449 28 Jul 15 olle 4   var debug = 0;
3449 28 Jul 15 olle 5   var hasInitProtocols = false;
3449 28 Jul 15 olle 6
3449 28 Jul 15 olle 7   // Page initialization
3449 28 Jul 15 olle 8   autoselect.initPage = function()
3449 28 Jul 15 olle 9   {
3449 28 Jul 15 olle 10     Buttons.addClickHandler('close', App.closeWindow);
3449 28 Jul 15 olle 11     Buttons.addClickHandler('btnOk', autoselect.doAutoSelect);
3449 28 Jul 15 olle 12     
3449 28 Jul 15 olle 13     Events.addEventHandler('quantity_regular', 'keypress', Events.numberOnly);
3449 28 Jul 15 olle 14     Events.addEventHandler('quality_score', 'keypress', Events.numberOnly);
3449 28 Jul 15 olle 15
3449 28 Jul 15 olle 16 /*    
3449 28 Jul 15 olle 17     Events.addEventHandler('preNormalized.0', 'click', autoselect.setPreNormalize);
3449 28 Jul 15 olle 18     Events.addEventHandler('preNormalized.1', 'click', autoselect.setPreNormalize);
3449 28 Jul 15 olle 19 */
3449 28 Jul 15 olle 20
3449 28 Jul 15 olle 21 /*    
3449 28 Jul 15 olle 22     Events.addEventHandler('normalizationProtocol', 'change', autoselect.protocolOnChange);
3449 28 Jul 15 olle 23     Meludi.loadProtocols('DNA_NORMALIZATION_PROTOCOL', 'normalizationProtocol', 'DNA_TARGET_AMOUNT,DNA_TARGET_VOLUME');
3449 28 Jul 15 olle 24     autoselect.setPreNormalize();
3449 28 Jul 15 olle 25 */
3449 28 Jul 15 olle 26   }
3449 28 Jul 15 olle 27
3449 28 Jul 15 olle 28   autoselect.setPreNormalize = function()
3449 28 Jul 15 olle 29   {
3449 28 Jul 15 olle 30     var frm = document.forms['options'];
3449 28 Jul 15 olle 31     var preNormalize = frm.preNormalized[1].checked;
3449 28 Jul 15 olle 32     
3449 28 Jul 15 olle 33     Doc.element('normalizationProtocol').disabled = !preNormalize;
3449 28 Jul 15 olle 34     Doc.element('remainingQuantity').disabled = preNormalize;
3449 28 Jul 15 olle 35     Doc.element('quantity_regular').disabled = preNormalize;
3449 28 Jul 15 olle 36     Doc.element('qualityScore').disabled = preNormalize;
3449 28 Jul 15 olle 37     Doc.element('quality_score').disabled = preNormalize;
3449 28 Jul 15 olle 38     Doc.element('reProcess').disabled = preNormalize;
3449 28 Jul 15 olle 39     Doc.element('flag').disabled = preNormalize;  
3449 28 Jul 15 olle 40   }
3449 28 Jul 15 olle 41   
3449 28 Jul 15 olle 42   autoselect.protocolOnChange = function()
3449 28 Jul 15 olle 43   {
3449 28 Jul 15 olle 44     var frm = document.forms['options'];
3449 28 Jul 15 olle 45
3449 28 Jul 15 olle 46     if (!hasInitProtocols)
3449 28 Jul 15 olle 47     {
3449 28 Jul 15 olle 48       hasInitProtocols = true;
3449 28 Jul 15 olle 49       
3449 28 Jul 15 olle 50       if (frm.normalizationProtocol.length == 0)
3449 28 Jul 15 olle 51       {
3449 28 Jul 15 olle 52         Wizard.setFatalError('No DNA normalization protocols found. Please ask the server administrator to create at least one protocol.');
3449 28 Jul 15 olle 53         return;
3449 28 Jul 15 olle 54       }
3449 28 Jul 15 olle 55       
3449 28 Jul 15 olle 56       var targetDnaAmount = parseFloat(frm.quantity_regular.value);
3449 28 Jul 15 olle 57       var closestAlternateProtocolIndex = -1;
3449 28 Jul 15 olle 58       var closestDnaAmount = 999;
3449 28 Jul 15 olle 59       
3449 28 Jul 15 olle 60       for (var i=0; i < frm.normalizationProtocol.length; i++)
3449 28 Jul 15 olle 61       {
3449 28 Jul 15 olle 62         var p = frm.normalizationProtocol[i].item;
3449 28 Jul 15 olle 63         frm.normalizationProtocol[i].text = p.name + ' (' + (p.DNATargetAmount || '? ') + 'µg in '+(p.DNATargetVolume || '? ')+'µl)';
3449 28 Jul 15 olle 64         
3449 28 Jul 15 olle 65         // Adjust default selected protocol to match the expected DNA amount
3449 28 Jul 15 olle 66         // The protocol must be an alternate project default and have a DNATargetAmount value
3449 28 Jul 15 olle 67         if (p.alternateDefault && p.DNATargetAmount)
3449 28 Jul 15 olle 68         {
3449 28 Jul 15 olle 69           var tmp = Math.abs(targetDnaAmount-p.DNATargetAmount);
3449 28 Jul 15 olle 70           if (tmp < closestDnaAmount)
3449 28 Jul 15 olle 71           {
3449 28 Jul 15 olle 72             closestDnaAmount = tmp;
3449 28 Jul 15 olle 73             closestAlternateProtocolIndex = i;
3449 28 Jul 15 olle 74           }
3449 28 Jul 15 olle 75         }
3449 28 Jul 15 olle 76       }
3449 28 Jul 15 olle 77       
3449 28 Jul 15 olle 78       if (closestAlternateProtocolIndex != -1)
3449 28 Jul 15 olle 79       {
3449 28 Jul 15 olle 80         frm.normalizationProtocol.selectedIndex = closestAlternateProtocolIndex;
3449 28 Jul 15 olle 81       }
3449 28 Jul 15 olle 82     }
3449 28 Jul 15 olle 83   }
3449 28 Jul 15 olle 84
3449 28 Jul 15 olle 85   
3449 28 Jul 15 olle 86   autoselect.doAutoSelect = function()
3449 28 Jul 15 olle 87   {
3449 28 Jul 15 olle 88     var options = {};
3449 28 Jul 15 olle 89     var frm = document.forms['options'];
3449 28 Jul 15 olle 90
3449 28 Jul 15 olle 91 /*    
3449 28 Jul 15 olle 92     var preNormalize = frm.preNormalized[1].checked;
3449 28 Jul 15 olle 93 */
3449 28 Jul 15 olle 94     var preNormalize = false;
3449 28 Jul 15 olle 95     var startDate = frm.startDate.value;
3449 28 Jul 15 olle 96     if (startDate && !Dates.isDate(startDate, 'yyyyMMdd'))
3449 28 Jul 15 olle 97     {
3449 28 Jul 15 olle 98       Forms.showNotification('startDate', 'Not a valid date');
3449 28 Jul 15 olle 99       return;
3449 28 Jul 15 olle 100     }
3449 28 Jul 15 olle 101     
3449 28 Jul 15 olle 102     if (!preNormalize)
3449 28 Jul 15 olle 103     {
3449 28 Jul 15 olle 104       var qRegular = parseFloat(frm.quantity_regular.value);
3449 28 Jul 15 olle 105       if (!(qRegular > 0))
3449 28 Jul 15 olle 106       {
3449 28 Jul 15 olle 107         Forms.showNotification('quantity_regular', 'Remaining quantity must be a number >0');
3449 28 Jul 15 olle 108         return;
3449 28 Jul 15 olle 109       }
3449 28 Jul 15 olle 110       
3449 28 Jul 15 olle 111       var qualityScore = parseFloat(frm.quality_score.value);
3449 28 Jul 15 olle 112 /*
3449 28 Jul 15 olle 113       if (!(qualityScore > 0))
3449 28 Jul 15 olle 114       {
3449 28 Jul 15 olle 115         Forms.showNotification('quality_score', 'RQS/RIN must be a number >0')
3449 28 Jul 15 olle 116         return;
3449 28 Jul 15 olle 117       }
3449 28 Jul 15 olle 118 */
3449 28 Jul 15 olle 119     }
3449 28 Jul 15 olle 120     else
3449 28 Jul 15 olle 121     {
3449 28 Jul 15 olle 122       options.normalizationProtocol = parseInt(frm.normalizationProtocol.value);
3449 28 Jul 15 olle 123     }
3449 28 Jul 15 olle 124     
3449 28 Jul 15 olle 125
3449 28 Jul 15 olle 126     if (startDate) options.startDate = startDate;
3449 28 Jul 15 olle 127     if (preNormalize)
3449 28 Jul 15 olle 128     {
3449 28 Jul 15 olle 129       options.preNormalized = 1;
3449 28 Jul 15 olle 130     }
3449 28 Jul 15 olle 131     else
3449 28 Jul 15 olle 132     {
3449 28 Jul 15 olle 133       if (frm.remainingQuantity.checked) options.remainingQuantity = qRegular;
3449 28 Jul 15 olle 134       if (frm.qualityScore.checked) options.qualityScore = qualityScore;
3449 28 Jul 15 olle 135 /*
3449 28 Jul 15 olle 136       if (frm.flag.checked) options.flag = 1;
3449 28 Jul 15 olle 137 */
3449 28 Jul 15 olle 138 /*
3449 28 Jul 15 olle 139       if (frm.reProcess.checked) options.reProcess = 1;
3449 28 Jul 15 olle 140 */
3449 28 Jul 15 olle 141     }
3449 28 Jul 15 olle 142     
3449 28 Jul 15 olle 143     options.ignore = Data.json('page-data', 'ignore');
3449 28 Jul 15 olle 144     
3449 28 Jul 15 olle 145     var url = '../Dna.servlet?ID='+App.getSessionId();
3449 28 Jul 15 olle 146 /*
3449 28 Jul 15 olle 147     url += '&cmd=AutoSelectRnaForMRna&numToSelect='+Data.get('page-data', 'num-to-select');
3449 28 Jul 15 olle 148 */
3449 28 Jul 15 olle 149 /*
3449 28 Jul 15 olle 150     url += '&cmd=AutoSelectDna&numToSelect='+Data.get('page-data', 'num-to-select');
3449 28 Jul 15 olle 151 */
3449 28 Jul 15 olle 152     url += '&cmd=AutoSelectDna';
3449 28 Jul 15 olle 153     url += '&numToSelect='+Data.get('page-data', 'num-to-select');
3449 28 Jul 15 olle 154     url += '&startDate='+Data.get('page-data', 'start-date');
3449 28 Jul 15 olle 155     
3449 28 Jul 15 olle 156     Wizard.showLoadingAnimation('Finding DNA. Please wait...');
3449 28 Jul 15 olle 157     Wizard.asyncJsonRequest(url, autoselect.dnaSelected, 'POST', JSON.stringify(options));
3449 28 Jul 15 olle 158   }
3449 28 Jul 15 olle 159
3449 28 Jul 15 olle 160   autoselect.dnaSelected = function(response)
3449 28 Jul 15 olle 161   {
3449 28 Jul 15 olle 162     var dna = response.dna;
3449 28 Jul 15 olle 163     if (dna.length == 0)
3449 28 Jul 15 olle 164     {
3449 28 Jul 15 olle 165       Doc.addClass('btnOk', 'disabled');
3449 28 Jul 15 olle 166       Wizard.setFatalError('Could not find any unprocessed DNA at this time.');
3449 28 Jul 15 olle 167       return;
3449 28 Jul 15 olle 168     }
3449 28 Jul 15 olle 169     
3449 28 Jul 15 olle 170     window.opener.SelectDna.dnaSelected(response);
3449 28 Jul 15 olle 171     window.close();
3449 28 Jul 15 olle 172   }
3449 28 Jul 15 olle 173
3449 28 Jul 15 olle 174   return autoselect;
3449 28 Jul 15 olle 175 }();
3449 28 Jul 15 olle 176
3449 28 Jul 15 olle 177 Doc.onLoad(AutoSelect.initPage);
3449 28 Jul 15 olle 178