public static long cal_inv(double temperature, double RW = 100, string METHOD = "poly3",
                                       double R1 = 10, double R2 = 10, double R3 = 10)
            {
                double rx;

                if (METHOD == "linear")
                {
                    rx = LINEAR.caly(temperature) / 1000;
                }
                else
                {
                    rx = POLY3.caly(temperature) / 1000;
                }
                double v_rxr1   = VREF_R * R1 / (rx + R1);
                double v_r2r3   = VREF_R * R3 / (R2 + R3);
                double ad_input = ((double)10 / 3 + 1 / RW * 200 / 3) * (v_r2r3 - v_rxr1);

                if (ad_input >= AD_MAX)
                {
                    ad_input = AD_MAX;
                }
                else if (ad_input <= 0)
                {
                    ad_input = 0;
                }
                long ret = (long)Math.Round((ad_input / VREF_AD) * AD_MAX);

                return(ret);
            }
            public static long cal_inv_by_pts(double temperature, List <double> para, string METHOD = "poly3", double R1 = 10)
            {
                double rx;

                if (METHOD == "linear")
                {
                    rx = LINEAR.caly(temperature) / 1000;
                }
                else
                {
                    rx = POLY3.caly(temperature) / 1000;
                }
                double v_rxr1 = VREF_R * R1 / (rx + R1);
                long   ret    = (long)(para[0] + para[1] * v_rxr1);

                return(ret);
            }