private void OKBtn_Click(object sender, EventArgs e) { if (modified) { AnalysisMethod am = AnalysisMethod.CalibrationCurve; INCCAnalysisParams.INCCMethodDescriptor c = ams.GetMethodParameters(am); ((INCCAnalysisParams.cal_curve_rec)c).percent_u235 = percent; INCCSelector sel = new INCCSelector(acq.detector_id, acq.item_type); NC.App.DB.UpdateAnalysisMethod(sel, ams); // flush changes on internal map to the DB } DialogResult = System.Windows.Forms.DialogResult.OK; Close(); }
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(); } }
public void Persist() { if (imd.modified) { if (ams == null) // HN No analysis methods existed. { ams = new AnalysisMethods(); ams.AddMethod(am, imd); } if (ams.HasMethod(am)) // if found, update the existing parameter values { INCCAnalysisParams.INCCMethodDescriptor c = ams.GetMethodParameters(am); imd.CopyTo(c); // This a virtual so imd can be the primary type } else // add the new method params under the current method key { ams.AddMethod(am, imd); } INCCSelector sel = new INCCSelector(acq.detector_id, acq.item_type); N.App.DB.UpdateAnalysisMethod(sel, ams); // flush changes on internal map to the DB } }
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); }
// todo: collar/k5 detached params (no explicit detector mapping) /// the details public void UpdateAnalysisMethodSpecifics(string detname, string mat, DB.AnalysisMethodSpecifiers db = null) { if (db == null) { db = new DB.AnalysisMethodSpecifiers(); } var res = // this finds the am for the given detector and acquire type from am in this.DetectorMaterialAnalysisMethods where (am.Key.detectorid.Equals(detname, StringComparison.OrdinalIgnoreCase) && am.Key.material.Equals(mat, StringComparison.OrdinalIgnoreCase)) select am; if (res.Count() > 0) // now execute the select expression and test the result for existence { KeyValuePair <INCCSelector, AnalysisMethods> kv = res.First(); AnalysisMethods sam = kv.Value; // the descriptor instance IEnumerator iter = kv.Value.GetMethodEnumerator(); while (iter.MoveNext()) { System.Tuple <AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor> md = (System.Tuple <AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor>)iter.Current; if (md.Item2 == null) // case from INCC5 transfer missing params, reflects file write bugs in INCC5 code { NC.App.Pest.logger.TraceEvent(LogLevels.Warning, 34029, "Missing {0}'s INCC {1} {2} method parameters, adding default values", detname, kv.Key.material, md.Item1.FullName()); //OK, there is probably smarter way of doing ths, but for now, does find the nulls, then add default params where necessary. hn 9.23.2015 if (md.Item2 == null) { INCCAnalysisParams.INCCMethodDescriptor rec = new INCCAnalysisParams.INCCMethodDescriptor(); switch (md.Item1) { case AnalysisMethod.Active: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.active_rec(); break; case AnalysisMethod.ActiveMultiplicity: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.active_mult_rec(); break; case AnalysisMethod.ActivePassive: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.active_passive_rec(); break; case AnalysisMethod.AddASource: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.add_a_source_rec(); break; case AnalysisMethod.CalibrationCurve: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.cal_curve_rec(); break; case AnalysisMethod.Collar: //This may not be enough for collar params creation. hn 9.23.2015 rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.collar_combined_rec(); break; case AnalysisMethod.CuriumRatio: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.cm_pu_ratio_rec(); break; case AnalysisMethod.KnownA: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.known_alpha_rec(); break; case AnalysisMethod.KnownM: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.known_m_rec(); break; case AnalysisMethod.Multiplicity: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.multiplicity_rec(); break; case AnalysisMethod.TruncatedMultiplicity: rec = (INCCAnalysisParams.INCCMethodDescriptor) new INCCAnalysisParams.truncated_mult_rec(); break; default: break; } sam.AddMethod(md.Item1, rec); } continue; } NC.App.Pest.logger.TraceEvent(LogLevels.Verbose, 34030, "Updating {0},{1} {2}", detname, mat, md.Item2.GetType().Name); DB.ElementList parms = null; switch (md.Item1) { case AnalysisMethod.KnownA: case AnalysisMethod.CalibrationCurve: case AnalysisMethod.KnownM: case AnalysisMethod.Multiplicity: case AnalysisMethod.TruncatedMultiplicity: case AnalysisMethod.AddASource: case AnalysisMethod.CuriumRatio: case AnalysisMethod.Active: case AnalysisMethod.ActivePassive: case AnalysisMethod.Collar: case AnalysisMethod.ActiveMultiplicity: parms = ((ParameterBase)md.Item2).ToDBElementList(); break; default: break; } if (parms != null) { db.UpdateCalib(detname, mat, md.Item2.GetType().Name, parms); // det, mat, amid, params } //Something amiss and sometimes not storing. Could this be it? else { //Didn't exist, so create and store. hn 9.22.2015 sam.AddMethod(md.Item1, md.Item2); } } } }
/// the details public void UpdateAnalysisMethodSpecifics(string detname, string mat, DB.AnalysisMethodSpecifiers db = null) { if (db == null) db = new DB.AnalysisMethodSpecifiers(); var res = // this finds the am for the given detector and acquire type from am in this.DetectorMaterialAnalysisMethods where (am.Key.detectorid.Equals(detname, StringComparison.OrdinalIgnoreCase) && am.Key.material.Equals(mat, StringComparison.OrdinalIgnoreCase)) select am; if (res.Count() > 0) // now execute the select expression and test the result for existence { KeyValuePair<INCCSelector, AnalysisMethods> kv = res.First(); AnalysisMethods sam = kv.Value; // the descriptor instance IEnumerator iter = kv.Value.GetMethodEnumerator(); while (iter.MoveNext()) { System.Tuple<AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor> md = (System.Tuple<AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor>)iter.Current; if (md.Item2 == null) // case from INCC5 transfer missing params, reflects file write bugs in INCC5 code { NC.App.Pest.logger.TraceEvent(LogLevels.Warning, 34029, "Missing {0}'s INCC {1} {2} method parameters, adding default values", detname, kv.Key.material, md.Item1.FullName()); //OK, there is probably smarter way of doing ths, but for now, does find the nulls, then add default params where necessary. hn 9.23.2015 if (md.Item2 == null) { INCCAnalysisParams.INCCMethodDescriptor rec = new INCCAnalysisParams.INCCMethodDescriptor(); switch (md.Item1) { case AnalysisMethod.Active: rec = new INCCAnalysisParams.active_rec(); break; case AnalysisMethod.ActiveMultiplicity: rec = new INCCAnalysisParams.active_mult_rec(); break; case AnalysisMethod.ActivePassive: rec = new INCCAnalysisParams.active_passive_rec(); break; case AnalysisMethod.AddASource: rec = new INCCAnalysisParams.add_a_source_rec(); break; case AnalysisMethod.CalibrationCurve: rec = new INCCAnalysisParams.cal_curve_rec(); break; case AnalysisMethod.Collar: rec = new INCCAnalysisParams.collar_combined_rec(); break; case AnalysisMethod.CuriumRatio: rec = new INCCAnalysisParams.curium_ratio_rec(); break; case AnalysisMethod.KnownA: rec = new INCCAnalysisParams.known_alpha_rec(); break; case AnalysisMethod.KnownM: rec = new INCCAnalysisParams.known_m_rec(); break; case AnalysisMethod.Multiplicity: rec = new INCCAnalysisParams.multiplicity_rec(); break; case AnalysisMethod.TruncatedMultiplicity: rec = new INCCAnalysisParams.truncated_mult_rec(); break; case AnalysisMethod.DUAL_ENERGY_MULT_SAVE_RESTORE: rec = new INCCAnalysisParams.de_mult_rec(); break; default: break; } sam.AddMethod(md.Item1, rec); } continue; } NC.App.Pest.logger.TraceEvent(LogLevels.Verbose, 34030, "Updating {0},{1} {2}", detname, mat, md.Item2.GetType().Name); DB.ElementList parms = null; bool bonk = false; switch (md.Item1) { case AnalysisMethod.KnownA: case AnalysisMethod.CalibrationCurve: case AnalysisMethod.KnownM: case AnalysisMethod.Multiplicity: case AnalysisMethod.TruncatedMultiplicity: case AnalysisMethod.AddASource: case AnalysisMethod.CuriumRatio: case AnalysisMethod.Active: case AnalysisMethod.ActivePassive: case AnalysisMethod.ActiveMultiplicity: case AnalysisMethod.DUAL_ENERGY_MULT_SAVE_RESTORE: parms = (md.Item2).ToDBElementList(); break; case AnalysisMethod.Collar: // bad mojo with the design break here parms = (md.Item2).ToDBElementList(); db.UpdateCalib(detname, mat, parms.OptTable, parms); parms = (md.Item2).ToDBElementList(); db.UpdateCalib(detname, mat, parms.OptTable, parms); parms = (md.Item2).ToDBElementList(); db.UpdateCalib(detname, mat, parms.OptTable, parms); parms = null; bonk = false; // skip the final processing step below break; default: bonk = true; break; } if (parms != null) db.UpdateCalib(detname, mat, md.Item2.GetType().Name, parms); // det, mat, amid, params else if (bonk) { //Didn't exist, so create and store. hn 9.22.2015 sam.AddMethod(md.Item1, md.Item2); } } } }
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); }