75 var row = rows[i]; |
76 var row = rows[i]; |
76 if (row.f_adjust_to_total_100) |
77 if (row.f_adjust_to_total_100) |
77 my_100 = true; |
78 my_100 = true; |
78 if (row.f_type == "Sugar") |
79 if (row.f_type == "Sugar") |
79 psugar += row.f_percentage; |
80 psugar += row.f_percentage; |
80 if (row.f_type == "Crystal") |
81 if (row.f_graintype == "Crystal") |
81 pcara += row.f_percentage; |
82 pcara += row.f_percentage; |
82 var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
83 var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
83 if (row.f_added == "Mash") { |
84 if (row.f_added == "Mash") { |
84 d = parseFloat($("#efficiency").jqxNumberInput('decimal')) / 100 * d; |
85 d = parseFloat($("#efficiency").jqxNumberInput('decimal')) / 100 * d; |
85 sugarsm += d; |
86 sugarsm += d; |
93 $('#est_og').val(estimate_sg(sugarsf, parseFloat($("#batch_size").jqxNumberInput('decimal')))); |
94 $('#est_og').val(estimate_sg(sugarsf, parseFloat($("#batch_size").jqxNumberInput('decimal')))); |
94 preboil_sg = estimate_sg(sugarsm, parseFloat($("#boil_size").jqxNumberInput('decimal'))); |
95 preboil_sg = estimate_sg(sugarsm, parseFloat($("#boil_size").jqxNumberInput('decimal'))); |
95 $('#est_color').val(kw_to_ebc($("#color_method").val(), colorw)); |
96 $('#est_color').val(kw_to_ebc($("#color_method").val(), colorw)); |
96 }; |
97 }; |
97 |
98 |
|
99 function hopFlavourContribution(bt, vol, use, amount) { |
|
100 var result; |
|
101 |
|
102 if ((use == "First Wort") || (use == "First wort")) { |
|
103 result = 0.15 * amount * 1000; // assume 15% flavourcontribution for fwh |
|
104 } else if (bt > 50) { |
|
105 result = 0.10 * amount * 1000; // assume 10% flavourcontribution as a minimum |
|
106 } else { |
|
107 result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2)) * amount * 1000; |
|
108 if (result < (0.10 * amount * 1000)) |
|
109 result = 0.10 * amount * 1000; // assume 10% flavourcontribution as a minimum |
|
110 } |
|
111 console.log("hopFlavourContribution("+bt+","+vol+","+use+","+amount+"): "+(result / vol)); |
|
112 return result / vol; |
|
113 } |
|
114 |
|
115 function hopAromaContribution(bt, vol, use, amount) { |
|
116 var result = 0; |
|
117 |
|
118 if (bt > 20) { |
|
119 result = 0; |
|
120 } else if (bt > 7.5) { |
|
121 result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) /4, 2)) * amount * 1000; |
|
122 } else if (use == "Boil") { |
|
123 result = amount * 1000; |
|
124 } else if (use == "Aroma") { |
|
125 result = 1.2 * amount * 1000; |
|
126 } else if (use == "Whirlpool") { |
|
127 result = 1.2 * amount * 1000; |
|
128 } else if ((use == "Dry Hop") || (use == "Dry hop")) { |
|
129 result = 1.33 * amount * 1000; |
|
130 } |
|
131 console.log("hopAromaContribution("+bt+","+vol+","+use+","+amount+"): "+(result / vol)); |
|
132 return result / vol; |
|
133 } |
|
134 |
98 function calcIBUs() { |
135 function calcIBUs() { |
99 var total_ibus = 0; |
136 var total_ibus = 0; |
100 var rows = $('#hopGrid').jqxGrid('getrows'); |
137 var rows = $('#hopGrid').jqxGrid('getrows'); |
101 for (var i = 0; i < rows.length; i++) { |
138 for (var i = 0; i < rows.length; i++) { |
102 var row = rows[i]; |
139 var row = rows[i]; |
103 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')), |
140 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')), |
104 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), $("#ibu_method").val()); |
141 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), $("#ibu_method").val()); |
|
142 hopFlavourContribution(parseFloat(row.h_time), parseFloat($("#batch_size").jqxNumberInput('decimal')), |
|
143 row.h_useat, parseFloat(row.h_amount)); |
|
144 hopAromaContribution(parseFloat(row.h_time), parseFloat($("#batch_size").jqxNumberInput('decimal')), |
|
145 row.h_useat, parseFloat(row.h_amount)); |
105 } |
146 } |
106 console.log("calcIBUs(): " + total_ibus); |
147 console.log("calcIBUs(): " + total_ibus); |
107 $('#est_ibu').val(total_ibus); |
148 $('#est_ibu').val(total_ibus); |
108 }; |
149 }; |
|
150 |
|
151 function calcSVG() { |
|
152 var rows = $('#yeastGrid').jqxGrid('getrows'); |
|
153 for (var i = 0; i < rows.length; i++) { |
|
154 var row = rows[i]; |
|
155 if (row.y_use == "Primary") |
|
156 svg = parseFloat(row.y_attenuation); |
|
157 } |
|
158 } |
109 |
159 |
110 function calcFermentablesFromOG(OG) { |
160 function calcFermentablesFromOG(OG) { |
111 |
161 |
112 console.log("calcFermentablesFromOG("+OG+")"); |
162 console.log("calcFermentablesFromOG("+OG+")"); |
113 var i; |
163 var i; |
155 dataRecord.boil_size = new_boil; |
205 dataRecord.boil_size = new_boil; |
156 $("#boil_size").val(Math.round(new_boil * 100) / 100); |
206 $("#boil_size").val(Math.round(new_boil * 100) / 100); |
157 dataRecord.batch_size = parseFloat(event.args.value); |
207 dataRecord.batch_size = parseFloat(event.args.value); |
158 calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal'))); // Keep the OG |
208 calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal'))); // Keep the OG |
159 calcFermentables(); |
209 calcFermentables(); |
|
210 calcSVG(); |
160 calcABV(); |
211 calcABV(); |
161 // TODO: adjust the hops, miscs, yeast, water. |
212 // TODO: adjust the hops, miscs, yeast, water. |
162 calcIBUs(); |
213 calcIBUs(); |
163 }); |
214 }); |
164 $('#boil_time').on('change', function (event) { |
215 $('#boil_time').on('change', function (event) { |
169 // console.log("old_evap:"+old_evap+" new_evap:"+new_evap+" new_boil:"+new_boil); |
220 // console.log("old_evap:"+old_evap+" new_evap:"+new_evap+" new_boil:"+new_boil); |
170 dataRecord.boil_time = parseFloat(event.args.value); |
221 dataRecord.boil_time = parseFloat(event.args.value); |
171 dataRecord.boil_size = new_boil; |
222 dataRecord.boil_size = new_boil; |
172 $("#boil_size").val(Math.round(new_boil * 100) / 100); |
223 $("#boil_size").val(Math.round(new_boil * 100) / 100); |
173 calcFermentables(); |
224 calcFermentables(); |
|
225 calcSVG(); |
174 calcABV(); |
226 calcABV(); |
175 // TODO: adjust the hops, miscs, yeast, water. |
227 // TODO: adjust the hops, miscs, yeast, water. |
176 calcIBUs(); |
228 calcIBUs(); |
177 }); |
229 }); |
178 $('#efficiency').on('change', function (event) { |
230 $('#efficiency').on('change', function (event) { |
179 console.log("efficiency change:"+event.args.value); |
231 console.log("efficiency change:"+event.args.value); |
180 calcFermentables(); |
232 calcFermentables(); |
|
233 calcSVG(); |
181 calcABV(); |
234 calcABV(); |
182 calcIBUs(); |
235 calcIBUs(); |
183 }); |
236 }); |
184 $('#est_og').on('change', function (event) { |
237 $('#est_og').on('change', function (event) { |
185 console.log("est_og change:"+event.args.value); |
238 console.log("est_og change:"+event.args.value); |
186 calcFermentablesFromOG(event.args.value); // Adjust fermentables amounts |
239 calcFermentablesFromOG(event.args.value); // Adjust fermentables amounts |
187 calcFermentables(); // Update the recipe details |
240 calcFermentables(); // Update the recipe details |
|
241 calcSVG(); |
188 calcABV(); // and ABV |
242 calcABV(); // and ABV |
189 calcIBUs(); // and the IBU's. |
243 calcIBUs(); // and the IBU's. |
190 }); |
244 }); |
191 }; |
245 }; |
192 |
246 |