723 $("#jqxWidget").css('visibility', 'visible'); |
723 $("#jqxWidget").css('visibility', 'visible'); |
724 }); |
724 }); |
725 |
725 |
726 |
726 |
727 |
727 |
|
728 function Round(n,d) { |
|
729 var m, i; |
|
730 for (i = 0, m = 1; i < d; i++, m *= 10); |
|
731 return Math.round(n * m) / m; |
|
732 } |
|
733 |
|
734 |
|
735 /* |
|
736 * From "Rekenen aan bier" by Hans Halberstadt. |
|
737 */ |
|
738 var K1s = 0.384; |
|
739 var K1a = -0.177; |
|
740 var K1e = 0.241; |
|
741 var K1g = 0.247; |
|
742 var Ks = 0.1415; |
|
743 var Ka1 = 0.058; |
|
744 var Ka2 = 0.078; |
|
745 var Ke = 0.174; |
|
746 var Kg = 0.109; |
|
747 |
|
748 // =E2/E6+(E3/E6)*$B$24/$B$23+(E3/E6)*(E3/E6)*$B$25/$B$23+E4/E6*$B$26/$B$23+E5/E6*$B$27/$B$23 |
|
749 // For Brix |
|
750 function A(sugar, volume, alc, eiwit, glycerol) { |
|
751 |
|
752 var vol = volume * 1000; |
|
753 var A = sugar/vol + (alc/vol)*Ka1/Ks + (alc/vol)*(alc/vol) * Ka2/Ks + eiwit/vol * Ke/Ks + glycerol/vol * Kg/Ks; |
|
754 |
|
755 console.log("A("+sugar+"."+volume+","+alc+","+eiwit+","+glycerol+"):"+A); |
|
756 return A; |
|
757 } |
|
758 |
|
759 // =E2/E6+(E3/E6)*$B$20/$B$19+E4/E6*$B$21/$B$19+E5/E6*$B$22/$B$19 |
|
760 // for Plato |
|
761 function B(sugar, volume, alc, eiwit, glycerol) { |
|
762 |
|
763 var vol = volume * 1000; |
|
764 var B = sugar/vol + (alc/vol)*K1a/K1s + eiwit/vol*K1e/K1s + glycerol/vol*K1g/K1s; |
|
765 |
|
766 console.log("B("+sugar+"."+volume+","+alc+","+eiwit+","+glycerol+"):"+B); |
|
767 return B; |
|
768 } |
|
769 |
|
770 |
728 function ebc_to_srm(ebc) { |
771 function ebc_to_srm(ebc) { |
729 var srm = -1.32303E-12 * Math.pow(ebc, 4) - 0.00000000291515 * Math.pow(ebc, 3) + 0.00000818515 * Math.pow(ebc, 2) + 0.372038 * ebc + 0.596351; |
772 var srm = -1.32303E-12 * Math.pow(ebc, 4) - 0.00000000291515 * Math.pow(ebc, 3) + 0.00000818515 * Math.pow(ebc, 2) + 0.372038 * ebc + 0.596351; |
730 if ((ebc < 0) || (srm < 0)) |
773 if ((ebc < 0) || (srm < 0)) |
731 console.log("ebc_to_srm("+ebc+") = "+srm); |
774 console.log("ebc_to_srm("+ebc+") = "+srm); |
732 return srm |
775 return srm |
784 |
827 |
785 /* |
828 /* |
786 * Kleurwerking naar SRM. Niet voor Halberstadt, Naudts |
829 * Kleurwerking naar SRM. Niet voor Halberstadt, Naudts |
787 */ |
830 */ |
788 function kw_to_srm(colormethod, c) { |
831 function kw_to_srm(colormethod, c) { |
789 if(colormethod==0)// Morey |
832 if(colormethod==0)return 1.4922*Math.pow(c,0.6859);//Morey |
790 return 1.4922*Math.pow(c,0.6859); |
833 if(colormethod==1)return 0.3*c+4.7;//Mosher |
791 if(colormethod==1)// Mosher |
834 if(colormethod==2)return 0.2*c+8.4;//Daniels |
792 return 0.3*c+4.7; |
835 return 0;//Halberstadt,Naudts |
793 if(colormethod==2)// Daniels |
836 } |
794 return 0.2*c+8.4; |
837 function kw_to_ebc(colormethod, c){return srm_to_ebc(kw_to_srm(colormethod,c));} |
795 if(colormethod==3)// Halberstadt |
|
796 return 0; |
|
797 if(colormethod==4)// Naudts |
|
798 return 0; |
|
799 } |
|
800 |
|
801 |
|
802 |
|
803 function kw_to_ebc(colormethod, c) { |
|
804 return srm_to_ebc(kw_to_srm(colormethod,c)); |
|
805 } |
|
806 |
838 |
807 |
839 |
808 |
840 |
809 /* |
841 /* |
810 * Berekeningen uit https://www.hobbybrouwen.nl/forum/index.php/topic,6079.msg69464.html#msg69464 |
842 * Berekeningen uit https://www.hobbybrouwen.nl/forum/index.php/topic,6079.msg69464.html#msg69464 |
811 */ |
843 */ |
812 function toIBU(Use, Form, SG, Volume, Amount, Boiltime, Alpha, Method) |
844 function toIBU(Use, Form, SG, Volume, Amount, Boiltime, Alpha, Method) |
813 { |
845 { |
814 var gravity = parseFloat(SG); |
846 var gravity=parseFloat(SG); |
815 var liters = parseFloat(Volume); |
847 var liters=parseFloat(Volume); |
816 var alpha = parseFloat(Alpha)/100; |
848 var alpha=parseFloat(Alpha)/100; |
817 var mass = parseFloat(Amount) * 1000; |
849 var mass=parseFloat(Amount)*1000; |
818 var time = parseFloat(Boiltime); |
850 var time=parseFloat(Boiltime); |
819 var fmoment = 1.0; |
851 var fmoment=1.0; |
820 var pfactor = 1.0; |
852 var pfactor=1.0; |
821 var ibu = 0; |
853 var ibu=0; |
822 |
854 |
823 if ((Use == 3) || (Use == 4) || (Use == 5)) { // Aroma, Whirlpool or Dry hop. |
855 if((Use==3)||(Use==4)||(Use==5)){// Aroma, Whirlpool or Dry hop. |
824 fmoment = 0.0; |
856 fmoment=0.0; |
825 } else if (Use == 0) { // Mash |
857 }else if(Use==0){// Mash |
826 fmoment += my_factor_mashhop / 100; // Brouwhulp |
858 fmoment+=my_factor_mashhop/100;// Brouwhulp |
827 } else if (Use == 1) { // First wort |
859 }else if(Use==1){// First wort |
828 fmoment += my_factor_fwh / 100; // Brouwhulp, Louis, Ozzie |
860 fmoment+=my_factor_fwh/100;// Brouwhulp, Louis, Ozzie |
829 } |
861 } |
830 |
862 |
831 if (Form == 0) { // Pellet |
863 if(Form==0){// Pellet |
832 pfactor += my_factor_pellet / 100; |
864 pfactor+=my_factor_pellet/100; |
833 } |
865 } |
834 if (Form == 1 ) { // Plug |
866 if(Form==1){// Plug |
835 pfactor += my_factor_plug / 100; |
867 pfactor+=my_factor_plug/100; |
836 } |
868 } |
837 if (Form == 3) { // Wet leaf |
869 if(Form==3){// Wet leaf |
838 pfactor += my_factor_wethop / 100; // From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py |
870 pfactor+=my_factor_wethop/100;// From https://github.com/chrisgilmerproj/brewday/blob/master/brew/constants.py |
839 } |
871 } |
840 |
872 |
841 if (Method == 0) { // Tinseth |
873 if(Method==0){// Tinseth |
842 /* http://realbeer.com/hops/research.html */ |
874 /* http://realbeer.com/hops/research.html */ |
843 var AddedAlphaAcids = (alpha * mass * 1000) / liters; |
875 var AddedAlphaAcids = (alpha * mass * 1000) / liters; |
844 var Bigness_factor = 1.65 * Math.pow( 0.000125, gravity - 1); |
876 var Bigness_factor = 1.65 * Math.pow( 0.000125, gravity - 1); |
845 var BoilTime_factor = ((1 - Math.exp(-0.04 * time)) / 4.15); |
877 var BoilTime_factor = ((1 - Math.exp(-0.04 * time)) / 4.15); |
846 var utiisation = Bigness_factor * BoilTime_factor; |
878 var utiisation = Bigness_factor * BoilTime_factor; |
847 ibu = Math.round(utiisation * AddedAlphaAcids * fmoment * pfactor * 10) / 10.0; |
879 ibu = Round(utiisation * AddedAlphaAcids * fmoment * pfactor,1); |
848 } |
880 } |
849 if (Method == 2) { // Daniels |
881 if(Method==2){// Daniels |
850 var boilfactor; |
882 var boilfactor; |
851 var sgfactor; |
883 var sgfactor; |
852 if (Form == 2) // Leaf |
884 if (Form==2)// Leaf |
853 boilfactor = -(0.0041*time*time)+(0.6162*time)+1.5779; |
885 boilfactor = -(0.0041*time*time)+(0.6162*time)+1.5779; |
854 else |
886 else |
855 boilfactor = -(0.0051*time*time)+(0.7835*time)+1.9348; |
887 boilfactor = -(0.0051*time*time)+(0.7835*time)+1.9348; |
856 if (gravity < 1050) |
888 if (gravity<1050) |
857 sgfactor = 0; |
889 sgfactor=0; |
858 else |
890 else |
859 sgfactor = (gravity - 1050) / 200; |
891 sgfactor=(gravity-1050)/200; |
860 ibu = Math.round(fmoment * ((mass * (alpha * 100) * boilfactor * 0.1) / (liters * (1 + sgfactor))) * 10) / 10; |
892 ibu = Round(fmoment*((mass*(alpha*100)*boilfactor* 0.1)/(liters*(1+sgfactor))),1); |
861 } |
893 } |
862 if (Method == 1) { // Rager |
894 if(Method==1){// Rager |
863 var boilfactor; |
895 var boilfactor; |
864 var sgfactor; |
896 var sgfactor; |
865 boilfactor = fmoment * 18.11 + 13.86 * Math.tanh((time * 31.32) / 18.27); |
897 boilfactor = fmoment*18.11+13.86*Math.tanh((time*31.32)/18.27); |
866 if (gravity < 1050) |
898 if (gravity<1050) |
867 sgfactor = 0; |
899 sgfactor=0; |
868 else |
900 else |
869 sgfactor = (gravity - 1050) / 200; |
901 sgfactor=(gravity-1050)/200; |
870 ibu = Math.round((mass * (alpha * 100) * boilfactor * 0.1) / (liters * (1 + sgfactor)) * 10) / 10; |
902 ibu = Round((mass*(alpha*100)*boilfactor*0.1)/(liters*(1+sgfactor)),1); |
871 } |
903 } |
872 |
904 |
873 // console.log("toIBU("+Use+","+Form+","+SG+","+Volume+","+Amount+","+Boiltime+","+Alpha+","+Method+"):"+ibu+" fm:"+fmoment+" pf:"+pfactor); |
905 //console.log("toIBU("+Use+","+Form+","+SG+","+Volume+","+Amount+","+Boiltime+","+Alpha+","+Method+"):"+ibu+" fm:"+fmoment+" pf:"+pfactor); |
874 return ibu; |
906 return ibu; |
875 } |
907 } |
876 |
908 |
877 |
909 |
878 |
910 |
879 function ebc_to_color(ebc) { |
911 function ebc_to_color(ebc){return srm_to_color(ebc_to_srm(ebc));} |
880 return srm_to_color(ebc_to_srm(ebc)); |
912 function srm_to_color(srm){ |
881 } |
913 var i = Math.round(srm * 10); |
882 |
914 if(i<0){ |
883 |
915 i=0; |
884 |
916 } |
885 function srm_to_color(srm) { |
917 if(i>299){ |
886 |
918 i=299; |
887 var i = Math.round(srm * 10); |
919 } |
888 if (i < 0) { |
|
889 i = 0; |
|
890 } |
|
891 if (i > 299) { |
|
892 i = 299; |
|
893 } |
|
894 |
920 |
895 /* Table copied from Brouwhulp/BrewBuddy */ |
921 /* Table copied from Brouwhulp/BrewBuddy */ |
896 var R = [ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, // 0 |
922 var R = [ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, // 0 |
897 250, 250, 250, 250, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, // 2 |
923 250, 250, 250, 250, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, // 2 |
898 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, // 4 |
924 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, // 4 |
939 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, |
965 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, |
940 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 17, 16, 16, 15, 15, |
966 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 17, 16, 16, 15, 15, |
941 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, |
967 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, |
942 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2 ]; |
968 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2 ]; |
943 |
969 |
944 var color = R[i] * 65536 + G[i] * 256 + B[i]; |
970 var color=R[i]*65536+G[i]*256+B[i]; |
945 var result = color.toString(16).toUpperCase(); |
971 var result=color.toString(16).toUpperCase(); |
946 if (result.length < 6) { |
972 if(result.length<6) { |
947 result = '0' + result; |
973 result='0'+result; |
948 } |
974 } |
949 result = '#' + result; |
975 result='#'+result; |
950 return result; |
976 return result; |
951 } |
977 } |
952 |
978 |
953 |
979 |
954 |
980 |
955 function sg_to_plato(sg){return ((135.997*sg-630.272)*sg+1111.14)*sg-616.868;} |
981 function sg_to_plato(sg){return ((135.997*sg-630.272)*sg+1111.14)*sg-616.868;} |