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; } } } }
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; }
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"]); }
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()); }
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; }
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 }
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 }
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(); } }
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)); }
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"); }
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(); }
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); }
public void Init() { Coefficients = new INCCAnalysisParams.CurveEquationVals(); }
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); }