Ejemplo n.º 1
0
        void ApplyMethodCurve(CalibList list, INCCAnalysisParams.CurveEquationVals cev)
        {
            for (int i = 0; i < list.NumCalibPoints; i++)
            {
                if (AnalysisMethod == AnalysisMethod.KnownA)
                {
                    list[i].CalCurvDoubles = cev.a +
                                             cev.b * list[i].CalCurvMass;
                }
                else
                {
                    switch (cev.cal_curve_equation)
                    {
                    case INCCAnalysisParams.CurveEquation.CUBIC:
                        list[i].CalCurvDoubles = cev.a +
                                                 cev.b * list[i].CalCurvMass +
                                                 cev.c * list[i].CalCurvMass * list[i].CalCurvMass +
                                                 cev.d * list[i].CalCurvMass * list[i].CalCurvMass * list[i].CalCurvMass;
                        break;

                    case INCCAnalysisParams.CurveEquation.POWER:
                        list[i].CalCurvDoubles = cev.a * Math.Pow(list[i].CalCurvMass, cev.b);
                        break;

                    case INCCAnalysisParams.CurveEquation.HOWARDS:
                        list[i].CalCurvDoubles = (cev.a * list[i].CalCurvMass) / (1.0 + cev.b * list[i].CalCurvMass);
                        break;

                    case INCCAnalysisParams.CurveEquation.EXPONENTIAL:
                        list[i].CalCurvDoubles = cev.a * (1.0 - Math.Exp(-cev.b * list[i].CalCurvMass));
                        break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void CalculateMassBasis(INCCAnalysisParams.CurveEquationVals cev)
        {
            MaxDeclMass = 0;
            int num = 0;

            foreach (CalibData p in this)
            {
                if (p.CalPtsMass == 0)
                {
                    continue;
                }
                num++;
                if (p.CalPtsMass > MaxDeclMass)
                {
                    MaxDeclMass = p.CalPtsMass;
                }
            }
            if (MaxDeclMass <= 0)
            {
                MaxDeclMass = LargeMassConst;            // use this NCC5 max constant
            }
            for (int i = 0; i < Count; i++)              // normalize
            {
                this[i].CalCurvMass = ((double)i / (Count - 1)) * MaxDeclMass;
            }
            NumCalibPoints = num;
        }
Ejemplo n.º 3
0
 void CalCurveDBSnock(INCCAnalysisParams.CurveEquationVals cev, DataRow dr)
 {
     if (dr == null)
     {
         return;
     }
     cev.cal_curve_equation = (INCCAnalysisParams.CurveEquation)(DB.Utils.DBInt32(dr["cal_curve_equation"]));
     cev.a     = DB.Utils.DBDouble(dr["a"]);
     cev.b     = DB.Utils.DBDouble(dr["b"]);
     cev.c     = DB.Utils.DBDouble(dr["c"]);
     cev.d     = DB.Utils.DBDouble(dr["d"]);
     cev.var_a = DB.Utils.DBDouble(dr["var_a"]);
     cev.var_b = DB.Utils.DBDouble(dr["var_b"]);
     cev.var_c = DB.Utils.DBDouble(dr["var_c"]);
     cev.var_d = DB.Utils.DBDouble(dr["var_d"]);
     cev.setcovar(Coeff.a, Coeff.b, DB.Utils.DBDouble(dr["covar_ab"]));
     cev.setcovar(Coeff.a, Coeff.c, DB.Utils.DBDouble(dr["covar_ac"]));
     cev.setcovar(Coeff.a, Coeff.d, DB.Utils.DBDouble(dr["covar_ad"]));
     cev.setcovar(Coeff.b, Coeff.c, DB.Utils.DBDouble(dr["covar_bc"]));
     cev.setcovar(Coeff.b, Coeff.d, DB.Utils.DBDouble(dr["covar_bd"]));
     cev.setcovar(Coeff.c, Coeff.d, DB.Utils.DBDouble(dr["covar_cd"]));
     cev.sigma_x          = DB.Utils.DBDouble(dr["sigma_x"]);
     cev.upper_mass_limit = DB.Utils.DBDouble(dr["upper_mass_limit"]);
     cev.lower_mass_limit = DB.Utils.DBDouble(dr["lower_mass_limit"]);
 }
Ejemplo n.º 4
0
 public void RefreshCurveEqComboBox(ComboBox cb, INCCAnalysisParams.CurveEquationVals v)
 {
     cb.Items.Clear();
     foreach (INCCAnalysisParams.CurveEquation cs in System.Enum.GetValues(typeof(INCCAnalysisParams.CurveEquation)))
     {
         //Per Martyn, use equation string, not named value.  7/17/2014 HN
         cb.Items.Add(cs.ToDisplayString());
     }
     cb.Refresh();
     cb.SelectedIndex = cb.FindString(v.cal_curve_equation.ToDisplayString());
 }
Ejemplo n.º 5
0
        public void FieldFiller(INCCAnalysisParams.CurveEquationVals cev)
        {
            LowerMassLimitTextBox.Value  = cev.lower_mass_limit;
            UpperMassLimitTextBox.Value  = cev.upper_mass_limit;
            LowerAlphaLimitTextBox.Value = known_alpha.lower_corr_factor_limit;
            UpperAlphaLimitTextBox.Value = known_alpha.upper_corr_factor_limit;
            ConventionalATextBox.Value   = cev.a;
            ConventionalBTextBox.Value   = cev.b;
            VarianceATextBox.Value       = cev.var_a;
            VarianceBTextBox.Value       = cev.var_b;

            CovarianceABTextBox.Value = cev.covar(Coeff.a, Coeff.b);

            SigmaXTextBox.Value = cev.sigma_x;
        }
Ejemplo n.º 6
0
 public EqCoeffViewer(INCCAnalysisParams.CurveEquationVals coeff, INCCAnalysisParams.CurveEquation eq, CalibrationCurveList cclist)
 {
     InitializeComponent();
     det           = Integ.GetCurrentAcquireDetector();
     Text         += " for detector " + det.Id.DetectorName;
     disprows      = new List <DataLoad>();
     CurveEquation = eq;
     Coefficients  = coeff;
     CalcDataList  = cclist;
     BuildRep();
     BuildRows();
     BuildCurveCombo();
     LowerMassLimitTextBox.Text = CalcDataList.LowerMassLimit.ToString("N4");
     UpperMassLimitTextBox.Text = CalcDataList.UpperMassLimit.ToString("N4");
     _reg = new Regex("[1-9][0-9]*\\.?[0-9]*([Ee][+-]?[0-9]+)?");              // reg ex for number test
 }
Ejemplo n.º 7
0
 public EqCoeffViewer(INCCAnalysisParams.CurveEquationVals coeff, INCCAnalysisParams.CurveEquation eq, CalibrationCurveList cclist)
 {
     InitializeComponent();
     det = Integ.GetCurrentAcquireDetector();
     Text += " for detector " + det.Id.DetectorName;
     disprows = new List<DataLoad>();
     CurveEquation = eq;
     Coefficients = coeff;
     CalcDataList = cclist;
     BuildRep();
     BuildRows();
     BuildCurveCombo();
     LowerMassLimitTextBox.Text = CalcDataList.LowerMassLimit.ToString("N4");
     UpperMassLimitTextBox.Text = CalcDataList.UpperMassLimit.ToString("N4");
     _reg = new Regex("[1-9][0-9]*\\.?[0-9]*([Ee][+-]?[0-9]+)?");  // reg ex for number test
 }
Ejemplo n.º 8
0
        void GetCalCurve(INCCAnalysisParams.INCCMethodDescriptor imd,
                         ref INCCAnalysisParams.CurveEquationVals cev, ref double[] doubles, ref double[] decl_mass)
        {
            switch (AnalysisMethod)
            {
            case AnalysisMethod.CalibrationCurve:
                INCCAnalysisParams.cal_curve_rec cc = (INCCAnalysisParams.cal_curve_rec)imd;
                doubles   = cc.doubles;
                decl_mass = cc.dcl_mass;
                cev       = cc.cev;
                break;

            case AnalysisMethod.KnownA:
                INCCAnalysisParams.known_alpha_rec ka = (INCCAnalysisParams.known_alpha_rec)imd;
                doubles   = ka.doubles;
                decl_mass = ka.dcl_mass;
                cev       = ka.cev;
                break;

            case AnalysisMethod.AddASource:
                INCCAnalysisParams.add_a_source_rec aa = (INCCAnalysisParams.add_a_source_rec)imd;
                doubles   = aa.doubles;
                decl_mass = aa.dcl_mass;
                cev       = aa.cev;
                break;

            case AnalysisMethod.Active:
                INCCAnalysisParams.active_rec ac = (INCCAnalysisParams.active_rec)imd;
                doubles   = ac.doubles;
                decl_mass = ac.dcl_mass;
                cev       = ac.cev;
                break;
            }
            if (doubles == null)
            {
                doubles = new double[0];
            }
            if (decl_mass == null)
            {
                decl_mass = new double[0];
            }
            if (cev == null)
            {
                cev = new INCCAnalysisParams.CurveEquationVals();
            }
        }
Ejemplo n.º 9
0
 void CopyCoefficients(INCCAnalysisParams.CurveEquationVals src, INCCAnalysisParams.CurveEquationVals tgt)
 {
     tgt.a     = src.a;
     tgt.b     = src.b;
     tgt.c     = src.c;
     tgt.d     = src.d;
     tgt.var_a = src.var_a;
     tgt.var_b = src.var_b;
     tgt.var_c = src.var_c;
     tgt.var_d = src.var_d;
     tgt.setcovar(Coeff.a, Coeff.b, src.covar(Coeff.a, Coeff.b));
     tgt.setcovar(Coeff.a, Coeff.c, src.covar(Coeff.a, Coeff.c));
     tgt.setcovar(Coeff.a, Coeff.d, src.covar(Coeff.a, Coeff.d));
     tgt.setcovar(Coeff.b, Coeff.c, src.covar(Coeff.b, Coeff.c));
     tgt.setcovar(Coeff.b, Coeff.d, src.covar(Coeff.b, Coeff.d));
     tgt.setcovar(Coeff.c, Coeff.d, src.covar(Coeff.c, Coeff.d));
 }
Ejemplo n.º 10
0
 public void CalibrationFieldFiller(INCCAnalysisParams.CurveEquationVals cev)
 {
     LowerMassLimitTextBox.Text = cev.lower_mass_limit.ToString("E");
     UpperMassLimitTextBox.Text = cev.upper_mass_limit.ToString("E");
     ATextBox.Text            = cev.a.ToString("E4");
     BTextBox.Text            = cev.b.ToString("E4");
     CTextBox.Text            = cev.c.ToString("E4");
     DTextBox.Text            = cev.d.ToString("E4");
     VarianceATextBox.Text    = cev.var_a.ToString("E4");
     VarianceBTextBox.Text    = cev.var_b.ToString("E4");
     VarianceCTextBox.Text    = cev.var_c.ToString("E4");
     VarianceDTextBox.Text    = cev.var_d.ToString("E4");
     CovarianceABTextBox.Text = cev.covar(Coeff.a, Coeff.b).ToString("E4");
     CovarianceACTextBox.Text = cev.covar(Coeff.a, Coeff.c).ToString("E4");
     CovarianceADTextBox.Text = cev.covar(Coeff.a, Coeff.d).ToString("E4");
     CovarianceBCTextBox.Text = cev.covar(Coeff.b, Coeff.c).ToString("E4");
     CovarianceBDTextBox.Text = cev.covar(Coeff.b, Coeff.d).ToString("E4");
     CovarianceCDTextBox.Text = cev.covar(Coeff.c, Coeff.d).ToString("E4");
     SigmaXTextBox.Text       = cev.sigma_x.ToString("E4");
 }
Ejemplo n.º 11
0
 protected void FieldFiller(INCCAnalysisParams.CurveEquationVals cev)
 {
     //Now using NumericTextBox
     LowerMassLimitTextBox.Value = cev.lower_mass_limit;
     UpperMassLimitTextBox.Value = cev.upper_mass_limit;
     ATextBox.Value            = cev.a;
     BTextBox.Value            = cev.b;
     CTextBox.Value            = cev.c;
     DTextBox.Value            = cev.d;
     VarianceATextBox.Value    = cev.var_a;
     VarianceBTextBox.Value    = cev.var_b;
     VarianceCTextBox.Value    = cev.var_c;
     VarianceDTextBox.Value    = cev.var_d;
     CovarianceABTextBox.Value = cev.covar(Coeff.a, Coeff.b);
     CovarianceACTextBox.Value = cev.covar(Coeff.a, Coeff.c);
     CovarianceADTextBox.Value = cev.covar(Coeff.a, Coeff.d);
     CovarianceBCTextBox.Value = cev.covar(Coeff.b, Coeff.c);
     CovarianceBDTextBox.Value = cev.covar(Coeff.b, Coeff.d);
     CovarianceCDTextBox.Value = cev.covar(Coeff.c, Coeff.d);
     SigmaXTextBox.Text        = cev.sigma_x.ToString("E6");
     FieldFiller();
 }
Ejemplo n.º 12
0
        void PrepareCalibList()
        {
            CalibDataList.Clear();
            CalibDataList.am = AnalysisMethod;
            AnalysisMethods ams = Integ.GetMethodSelections(DetectorId, Material);

            INCCAnalysisParams.INCCMethodDescriptor imd = ams.GetMethodParameters(AnalysisMethod);
            INCCAnalysisParams.CurveEquationVals    cev = null;
            double[] doubles = null; double[] decl_mass = null;
            GetCalCurve(imd, ref cev, ref doubles, ref decl_mass);

            for (int i = 0; i < doubles.Length; i++)
            {
                CalibData p = new CalibData();
                p.CalPtsMass    = decl_mass[i];
                p.CalPtsDoubles = doubles[i];
                p.number        = i + 1;
                CalibDataList.Add(p);
            }
            CalibDataList.CalcLowerUpper();
            CalibDataList.CalculateMassBasis(cev);
            ApplyMethodCurve(CalibDataList, cev);
        }
Ejemplo n.º 13
0
 public void Init()
 {
     Coefficients = new INCCAnalysisParams.CurveEquationVals();
 }
Ejemplo n.º 14
0
        void ApplyCoefficients(INCCAnalysisParams.CurveEquationVals coeff, CalibrationCurveList cclist)
        {
            INCCSelector    sel = new INCCSelector(det.Id.DetectorId, Material);
            AnalysisMethods lam;
            bool            found = N.App.DB.DetectorMaterialAnalysisMethods.TryGetValue(sel, out lam);

            if (!found)
            {
                lam = new AnalysisMethods(sel);
            }
            if (!lam.HasMethod(AnalysisMethod))              // create it from scratch here ????
            {
                MessageBox.Show(string.Format("{0} method not specified for detector {1} and material {2}",
                                              AnalysisMethod.FullName(), det.Id.DetectorId, Material),
                                "Coefficient File Ingester", MessageBoxButtons.OK);
                return;
            }

            INCCAnalysisParams.INCCMethodDescriptor imd = lam.GetMethodParameters(AnalysisMethod);
            switch (AnalysisMethod)
            {
            case AnalysisMethod.CalibrationCurve:
                INCCAnalysisParams.cal_curve_rec c = (INCCAnalysisParams.cal_curve_rec)imd;
                CopyCoefficients(coeff, c.cev);
                c.cev.cal_curve_equation = CurveEquation;
                c.cev.lower_mass_limit   = cclist.LowerMassLimit;
                c.cev.upper_mass_limit   = cclist.UpperMassLimit;
                c.dcl_mass = cclist.MassAsArray;
                c.doubles  = cclist.DoublesAsArray;
                break;

            case AnalysisMethod.KnownA:
                INCCAnalysisParams.known_alpha_rec ka = (INCCAnalysisParams.known_alpha_rec)imd;
                CopyCoefficients(coeff, ka.cev);
                ka.cev.cal_curve_equation = CurveEquation;
                ka.cev.lower_mass_limit   = cclist.LowerMassLimit;
                ka.cev.upper_mass_limit   = cclist.UpperMassLimit;
                ka.dcl_mass = cclist.MassAsArray;
                ka.doubles  = cclist.DoublesAsArray;
                break;

            case AnalysisMethod.AddASource:
                INCCAnalysisParams.add_a_source_rec aas = (INCCAnalysisParams.add_a_source_rec)imd;
                CopyCoefficients(coeff, aas.cev);
                aas.cev.cal_curve_equation = CurveEquation;
                aas.cev.lower_mass_limit   = cclist.LowerMassLimit;
                aas.cev.upper_mass_limit   = cclist.UpperMassLimit;
                aas.dcl_mass = cclist.MassAsArray;
                aas.doubles  = cclist.DoublesAsArray;
                break;

            case AnalysisMethod.Active:
                INCCAnalysisParams.active_rec ac = (INCCAnalysisParams.active_rec)imd;
                CopyCoefficients(coeff, ac.cev);
                ac.cev.cal_curve_equation = CurveEquation;
                ac.cev.lower_mass_limit   = cclist.LowerMassLimit;
                ac.cev.upper_mass_limit   = cclist.UpperMassLimit;
                ac.dcl_mass = cclist.MassAsArray;
                ac.doubles  = cclist.DoublesAsArray;
                break;
            }
            imd.modified = true;
            // ok save it now
            N.App.DB.UpdateAnalysisMethod(sel, lam);              // flush changes on internal map to the DB
            MessageBox.Show(string.Format("Calibration data for analysis method {0} and material type {1} successfully stored in the database",
                                          det.Id.DetectorId, Material),
                            "Coefficient File Ingester", MessageBoxButtons.OK);
        }