Beispiel #1
0
 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();
 }
Beispiel #2
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();
            }
        }
Beispiel #3
0
 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
     }
 }
Beispiel #4
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);
        }
Beispiel #5
0
        // 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);
                    }
                }
            }
        }
Beispiel #7
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);
        }