299 } else { |
297 } else { |
300 result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2)); |
298 result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2)); |
301 if (result < 0.10) |
299 if (result < 0.10) |
302 result = 0.10; // assume 10% flavourcontribution as a minimum |
300 result = 0.10; // assume 10% flavourcontribution as a minimum |
303 } |
301 } |
304 result = (result * amount * 1000) / vol; |
302 return (result * amount * 1000) / vol; |
305 // console.log("hopFlavourContribution("+bt+","+vol+","+use+","+amount+"): "+result); |
|
306 return result; |
|
307 } |
303 } |
308 |
304 |
309 function hopAromaContribution(bt, vol, use, amount) { |
305 function hopAromaContribution(bt, vol, use, amount) { |
310 var result = 0; |
306 var result = 0; |
311 |
307 |
317 result = 1; |
313 result = 1; |
318 } else if (use == 3) { // Aroma |
314 } else if (use == 3) { // Aroma |
319 result = 1.2; |
315 result = 1.2; |
320 } else if (use == 4) { // Whirlpool |
316 } else if (use == 4) { // Whirlpool |
321 result = 1.2; |
317 result = 1.2; |
322 } else if (use == 5) { // Drt hop |
318 } else if (use == 5) { // Dry hop |
323 result = 1.33; |
319 result = 1.33; |
324 } |
320 } |
325 result = (result * amount * 1000) / vol; |
321 return (result * amount * 1000) / vol; |
326 // console.log("hopAromaContribution("+bt+","+vol+","+use+","+amount+"): "+result); |
|
327 return result; |
|
328 } |
322 } |
329 |
323 |
330 function calcIBUs() { |
324 function calcIBUs() { |
331 var total_ibus = 0; |
325 var total_ibus = 0; |
|
326 var ferm_ibus = 0; |
332 hop_aroma = hop_flavour = 0; |
327 hop_aroma = hop_flavour = 0; |
333 var rows = $('#hopGrid').jqxGrid('getrows'); |
328 var rows = $('#hopGrid').jqxGrid('getrows'); |
334 for (var i = 0; i < rows.length; i++) { |
329 for (var i = 0; i < rows.length; i++) { |
335 var row = rows[i]; |
330 var row = rows[i]; |
336 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size), |
331 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size), |
337 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method); |
332 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method); |
|
333 ferm_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, |
|
334 parseFloat(dataRecord.brew_fermenter_volume) + parseFloat(dataRecord.brew_fermenter_tcloss), |
|
335 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method); |
338 hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), |
336 hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), |
339 row.h_useat, parseFloat(row.h_amount)); |
337 row.h_useat, parseFloat(row.h_amount)); |
340 hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), |
338 hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), |
341 row.h_useat, parseFloat(row.h_amount)); |
339 row.h_useat, parseFloat(row.h_amount)); |
342 } |
340 } |
343 total_ibus = Math.round(total_ibus); |
341 total_ibus = Math.round(total_ibus); |
344 console.log("calcIBUs(): " + total_ibus + " flavour: " + hop_flavour + " aroma: " + hop_aroma); |
342 ferm_ibus = Math.round(ferm_ibus); |
|
343 console.log("calcIBUs(): " + total_ibus + " flavour: " + hop_flavour + " aroma: " + hop_aroma+" fermenter:"+ferm_ibus); |
345 dataRecord.est_ibu = total_ibus; |
344 dataRecord.est_ibu = total_ibus; |
346 $('#est_ibu').val(total_ibus); |
345 $('#est_ibu').val(total_ibus); |
347 $('#est_ibu2').val(total_ibus); |
346 $('#est_ibu2').val(total_ibus); |
348 $("#hop_flavour").jqxProgressBar('val', hop_flavour * 10); |
347 $("#hop_flavour").jqxProgressBar('val', hop_flavour * 10); |
349 $("#hop_aroma").jqxProgressBar('val', hop_aroma * 10); |
348 $("#hop_aroma").jqxProgressBar('val', hop_aroma * 10); |
|
349 $("#brew_fermenter_ibu").val(ferm_ibus); |
350 calcStage(); |
350 calcStage(); |
351 }; |
351 }; |
352 |
352 |
353 function calcSVG() { |
353 function calcSVG() { |
354 var rows = $('#yeastGrid').jqxGrid('getrows'); |
354 var rows = $('#yeastGrid').jqxGrid('getrows'); |
1504 }); |
1504 }); |
1505 |
1505 |
1506 $("#brew_fermenter_extrawater").on('change', function (event) { |
1506 $("#brew_fermenter_extrawater").on('change', function (event) { |
1507 dataRecord.brew_fermenter_extrawater = parseFloat(event.args.value); |
1507 dataRecord.brew_fermenter_extrawater = parseFloat(event.args.value); |
1508 calcFermentables(); |
1508 calcFermentables(); |
|
1509 calcIBUs(); |
1509 }); |
1510 }); |
1510 $("#brew_fermenter_tcloss").on('change', function (event) { |
1511 $("#brew_fermenter_tcloss").on('change', function (event) { |
1511 dataRecord.brew_fermenter_tcloss = parseFloat(event.args.value); |
1512 dataRecord.brew_fermenter_tcloss = parseFloat(event.args.value); |
1512 calcFermentables(); |
1513 calcFermentables(); |
|
1514 calcIBUs(); |
1513 }); |
1515 }); |
1514 |
1516 |
1515 $("#BLog").jqxButton({ disabled: (dataRecord.log_brew) ? false:true }); |
1517 $("#BLog").jqxButton({ disabled: (dataRecord.log_brew) ? false:true }); |
1516 $("#FLog").jqxButton({ disabled: (dataRecord.log_fermentation) ? false:true }); |
1518 $("#FLog").jqxButton({ disabled: (dataRecord.log_fermentation) ? false:true }); |
1517 }; |
1519 }; |
3219 $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', rowdata.f_percentage - diff); |
3222 $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', rowdata.f_percentage - diff); |
3220 $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_amount', namount); |
3223 $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_amount', namount); |
3221 } |
3224 } |
3222 } |
3225 } |
3223 calcFermentables(); |
3226 calcFermentables(); |
|
3227 calcIBUs(); |
3224 } else { |
3228 } else { |
3225 // Adjust all the rows. |
3229 // Adjust all the rows. |
3226 var nw = tw * diff / 100; |
3230 var nw = tw * diff / 100; |
3227 for (i = 0; i < rowscount; i++) { |
3231 for (i = 0; i < rowscount; i++) { |
3228 var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i); |
3232 var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i); |
3996 $("#brew_preboil_sg").on('valueChanged', function (event) { dataRecord.brew_preboil_sg = event.args.value; calcEfficiencyBeforeBoil() }); |
4002 $("#brew_preboil_sg").on('valueChanged', function (event) { dataRecord.brew_preboil_sg = event.args.value; calcEfficiencyBeforeBoil() }); |
3997 $("#est_pre_sg").jqxTooltip({ content: 'Het berekende SG in de kookketel na het spoelen en voor het koken.' }); |
4003 $("#est_pre_sg").jqxTooltip({ content: 'Het berekende SG in de kookketel na het spoelen en voor het koken.' }); |
3998 $("#est_pre_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
4004 $("#est_pre_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
3999 $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); |
4005 $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); |
4000 $("#brew_aboil_sg").jqxNumberInput( SGopts ); |
4006 $("#brew_aboil_sg").jqxNumberInput( SGopts ); |
4001 $("#brew_aboil_sg").on('valueChanged', function (event) { dataRecord.brew_aboil_sg = event.args.value; calcEfficiencyAfterBoil(); calcFermentables(); }); |
4007 $("#brew_aboil_sg").on('valueChanged', function (event) { |
|
4008 dataRecord.brew_aboil_sg = event.args.value; |
|
4009 calcEfficiencyAfterBoil(); |
|
4010 calcFermentables(); |
|
4011 calcIBUs(); |
|
4012 }); |
4002 $("#est_og3").jqxTooltip({ content: 'Het gewenste SG in de kookketel na het koken.' }); |
4013 $("#est_og3").jqxTooltip({ content: 'Het gewenste SG in de kookketel na het koken.' }); |
4003 $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); |
4014 $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); |
4004 $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); |
4015 $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); |
4005 $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
4016 $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
4006 $("#brew_preboil_volume").jqxTooltip({ content: 'Het gemeten volume van het wort voor het koken.' }); |
4017 $("#brew_preboil_volume").jqxTooltip({ content: 'Het gemeten volume van het wort voor het koken.' }); |
4008 $("#brew_preboil_volume").on('valueChanged', function (event) { dataRecord.brew_preboil_volume = event.args.value; calcEfficiencyBeforeBoil() }); |
4019 $("#brew_preboil_volume").on('valueChanged', function (event) { dataRecord.brew_preboil_volume = event.args.value; calcEfficiencyBeforeBoil() }); |
4009 $("#est_pre_vol").jqxTooltip({ content: 'Het berekende volume van het wort voor het koken.' }); |
4020 $("#est_pre_vol").jqxTooltip({ content: 'Het berekende volume van het wort voor het koken.' }); |
4010 $("#est_pre_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
4021 $("#est_pre_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
4011 $("#brew_aboil_volume").jqxTooltip({ content: 'Het gemeten volume van het wort na het koken.' }); |
4022 $("#brew_aboil_volume").jqxTooltip({ content: 'Het gemeten volume van het wort na het koken.' }); |
4012 $("#brew_aboil_volume").jqxNumberInput( Spin1dec ); |
4023 $("#brew_aboil_volume").jqxNumberInput( Spin1dec ); |
4013 $("#brew_aboil_volume").on('valueChanged', function (event) { dataRecord.brew_aboil_volume = event.args.value; calcEfficiencyAfterBoil(); calcFermentables(); }); |
4024 $("#brew_aboil_volume").on('valueChanged', function (event) { |
|
4025 dataRecord.brew_aboil_volume = event.args.value; |
|
4026 calcEfficiencyAfterBoil(); |
|
4027 calcFermentables(); |
|
4028 calcIBUs(); |
|
4029 }); |
4014 $("#est_a_vol").jqxTooltip({ content: 'Het gewenste volume na het koken.' }); |
4030 $("#est_a_vol").jqxTooltip({ content: 'Het gewenste volume na het koken.' }); |
4015 $("#est_a_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
4031 $("#est_a_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
4016 $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' }); |
4032 $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' }); |
4017 $("#brew_preboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
4033 $("#brew_preboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
4018 $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); |
4034 $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); |