Пример #1
0
 /// <summary>
 /// Save specific analysis results for Background, Initial Source, Normalization and Precision measurements.
 /// </summary>
 /// <param name="m">The measurement to preserve</param>
 /// <param name="res">The subclassed specific results instance</param> 
 static void SaveSpecificResultsForThisMeasurement(this Measurement m, INCCResult res)
 {
     long mid = m.MeasurementId.UniqueId;
     DB.ElementList els = res.ToDBElementList(); // generates the Table property content too
     DB.ParamsRelatedBackToMeasurement ar = new DB.ParamsRelatedBackToMeasurement(res.Table);
     long resid = ar.Create(mid, els);
     m.Logger.TraceEvent(NCCReporter.LogLevels.Verbose, 34103, String.Format("Results {0} preserved ({1})",resid, res.Table));
 }
Пример #2
0
 /// <summary>
 /// Save specific analysis results for Background, Initial Source, Normalization and Precision measurements.
 /// </summary>
 /// <param name="m">The measurement to preserve</param>
 /// <param name="res">The subclassed specific results instance</param> 
 static void SaveSpecificResultsForThisMeasurement(this Measurement m, INCCResult res)
 {
     DB.Measurements ms = new DB.Measurements();
     long mid = ms.Lookup(m.Detectors[0].Id.DetectorName, m.MeasDate, m.MeasOption.PrintName());
     DB.ElementList els = res.ToDBElementList(); // generates the Table property content too
     DB.ParamsRelatedBackToMeasurement ar = new DB.ParamsRelatedBackToMeasurement(res.Table, ms.db);
     long resid = ar.Create(mid, els);                          
     m.Logger.TraceEvent(NCCReporter.LogLevels.Verbose, 34103, String.Format("Results {0} preserved ({1})",resid, res.Table));
 }
Пример #3
0
        /// <summary>
        /// Save in the database the method results and copies of the current method parameters.
        /// The table entries are related back to the measurement.
        /// The method results are preserved in the results_\<method table name\> and \<method table name\>_m DB tables.
        /// </summary>
        /// <param name="m">The measurement to preserve</param>
        /// <param name="moskey">The option selector+multiplicity key for the method results map</param> 
        static void SaveMethodResultsForThisMeasurement(this Measurement m, MeasOptionSelector moskey)
        {
            // DB.Measurements ms = new DB.Measurements();
            long mid = m.MeasurementId.UniqueId;

            INCCMethodResults imrs;
            bool gotten = m.INCCAnalysisResults.TryGetINCCResults(moskey.MultiplicityParams, out imrs);
            if (gotten && imrs.Count > 0) // expected to be true for verification and calibration
            {
                //The distinct detector id and material type index the methods and the method results
                Dictionary<AnalysisMethod, INCCMethodResult> amimr = imrs[m.INCCAnalysisState.Methods.selector];
                // now get an enumerator over the map of method results
                Dictionary<AnalysisMethod, INCCMethodResult>.Enumerator ai = amimr.GetEnumerator();
                while (ai.MoveNext())
                {
                    INCCMethodResult imr = ai.Current.Value;
                    DB.ElementList els = imr.ToDBElementList(); // generates the Table property content too
                    DB.ParamsRelatedBackToMeasurement ar = new DB.ParamsRelatedBackToMeasurement(imr.Table);
                    long resid = ar.Create(mid, els);  // save the method results in the relevant results table
                    do
                    {
                        long mresid = ar.CreateMethod(resid, mid, imr.methodParams.ToDBElementList()); // save the initial method params (the copy rides on the results)
                        m.Logger.TraceEvent(NCCReporter.LogLevels.Verbose, 34104, string.Format("Method results {0} preserved ({1}, {2})", imr.Table, resid, mresid));
                    } while (imr.methodParams.Pump > 0);
                }
            }
        }
Пример #4
0
        public static void IngestAnalysisMethodResultsFromDB(Measurement m,  DB.DB db = null)
        {
            AnalysisMethods ams = m.INCCAnalysisState.Methods;
            IEnumerator iter = m.CountingAnalysisResults.GetMultiplicityEnumerator();
            while (iter.MoveNext())
            {
                Multiplicity mkey = (Multiplicity)((KeyValuePair<SpecificCountingAnalyzerParams, object>)(iter.Current)).Key;
                foreach (AnalysisMethod am in System.Enum.GetValues(typeof(AnalysisMethod)))
                {
                    if (!ams.choices[(int)am])
                        continue;
                    if (!(am > AnalysisMethod.None && am <= AnalysisMethod.TruncatedMultiplicity && (am != AnalysisMethod.INCCNone)))
                    {
                        if (!am.IsNone())
                            NC.App.Pest.logger.TraceEvent(LogLevels.Warning, 34061, "Skipping DB ingest of {0} calib results", am);
                        continue;
                    }
                    long mid = m.MeasurementId.UniqueId;
                    DB.ParamsRelatedBackToMeasurement ar = new DB.ParamsRelatedBackToMeasurement(db);
                    DataTable dt;
                    switch (am)
                    {
                    case AnalysisMethod.CalibrationCurve:
                        {
                            INCCMethodResults.results_cal_curve_rec ccres = (INCCMethodResults.results_cal_curve_rec)
                                m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                            ar.table = "results_cal_curve_rec";
                            dt = ar.GetCombinedResults(mid);
                            foreach (DataRow dr in dt.Rows)
                            {
                                long rid = DB.Utils.DBInt64(dr["id"]);
                                ccres.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                                ccres.pu_mass = VTupleHelper.Make(dr, "pu_mass");
                                ccres.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                                ccres.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                                ccres.pass = DB.Utils.DBBool(dr["pass"]);
                                ccres.dcl_u_mass = DB.Utils.DBDouble(dr["dcl_u_mass"]);
                                ccres.length = DB.Utils.DBDouble(dr["length"]);
                                ccres.heavy_metal_content = DB.Utils.DBDouble(dr["heavy_metal_content"]);
                                ccres.heavy_metal_correction = DB.Utils.DBDouble(dr["heavy_metal_correction"]);
                                ccres.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                                ccres.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                                ccres.heavy_metal_corr_singles = VTupleHelper.Make(dr, "heavy_metal_corr_singles");
                                ccres.heavy_metal_corr_doubles = VTupleHelper.Make(dr, "heavy_metal_corr_doubles");
                                INCCAnalysisParams.cal_curve_rec cc = ccres.methodParams;
                                CalCurveDBSnock(cc.cev, dr);
                                cc.CalCurveType = (INCCAnalysisParams.CalCurveType)DB.Utils.DBInt32(dr["cal_curve_type"]);
                                cc.dcl_mass = DB.Utils.ReifyDoubles((string)dr["dcl_mass"]);
                                cc.doubles = DB.Utils.ReifyDoubles((string)dr["doubles"]);
                                cc.percent_u235 = DB.Utils.DBDouble(dr["percent_u235"]);
                                cc.heavy_metal_reference = DB.Utils.DBDouble(dr["heavy_metal_reference"]);
                                cc.heavy_metal_corr_factor = DB.Utils.DBDouble(dr["heavy_metal_corr_factor"]);
                            }
                        }
                        break;
                    case AnalysisMethod.KnownA:
                        {
                            INCCMethodResults.results_known_alpha_rec res = (INCCMethodResults.results_known_alpha_rec)
                                m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                            ar.table = "results_known_alpha_rec";
                            dt = ar.GetCombinedResults(mid);
                            foreach (DataRow dr in dt.Rows)
                            {
                                res.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                                res.pu_mass = VTupleHelper.Make(dr, "pu_mass");
                                res.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                                res.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                                res.pass = DB.Utils.DBBool(dr["pass"]);
                                res.mult = DB.Utils.DBDouble(dr["mult"]);
                                res.alphaK = DB.Utils.DBDouble(dr["alpha"]);
                                res.mult_corr_doubles = VTupleHelper.Make(dr, "mult_corr_doubles");

                                res.dcl_u_mass = DB.Utils.DBDouble(dr["dcl_u_mass"]);
                                res.length = DB.Utils.DBDouble(dr["length"]);
                                res.heavy_metal_content = DB.Utils.DBDouble(dr["heavy_metal_content"]);
                                res.heavy_metal_correction = DB.Utils.DBDouble(dr["heavy_metal_correction"]);

                                res.corr_factor = DB.Utils.DBDouble(dr["corr_factor"]);
                                res.dry_alpha_or_mult_dbls = DB.Utils.DBDouble(dr["dry_alpha_or_mult_dbls"]);
                                res.corr_singles = VTupleHelper.Make(dr, "corr_singles");
                                res.corr_doubles = VTupleHelper.Make(dr, "corr_doubles");

                                INCCAnalysisParams.known_alpha_rec ka = res.methodParams;
                                ka.rho_zero = DB.Utils.DBDouble(dr["rho_zero"]);
                                ka.alpha_wt = DB.Utils.DBDouble(dr["alpha_wt"]);
                                ka.k = DB.Utils.DBDouble(dr["k"]);
                                ka.cev.a = DB.Utils.DBDouble(dr["a"]);
                                ka.cev.b = DB.Utils.DBDouble(dr["b"]);
                                ka.cev.var_a = DB.Utils.DBDouble(dr["var_a"]);
                                ka.cev.var_b = DB.Utils.DBDouble(dr["var_b"]);
                                ka.cev.setcovar(Coeff.a, Coeff.b, DB.Utils.DBDouble(dr["covar_ab"]));
                                ka.cev.sigma_x = DB.Utils.DBDouble(dr["sigma_x"]);
                                ka.known_alpha_type = (INCCAnalysisParams.KnownAlphaVariant)(DB.Utils.DBInt32(dr["known_alpha_type"]));
                                ka.ring_ratio.cal_curve_equation = (INCCAnalysisParams.CurveEquation)(DB.Utils.DBInt32(dr["ring_ratio_equation"]));
                                ka.ring_ratio.a = DB.Utils.DBDouble(dr["ring_ratio_a"]);
                                ka.ring_ratio.b = DB.Utils.DBDouble(dr["ring_ratio_b"]);
                                ka.ring_ratio.c = DB.Utils.DBDouble(dr["ring_ratio_c"]);
                                ka.ring_ratio.d = DB.Utils.DBDouble(dr["ring_ratio_d"]);
                                ka.dcl_mass = DB.Utils.ReifyDoubles((string)dr["dcl_mass"]);
                                ka.doubles = DB.Utils.ReifyDoubles((string)dr["doubles"]);
                                ka.heavy_metal_reference = DB.Utils.DBDouble(dr["heavy_metal_reference"]);
                                ka.heavy_metal_corr_factor = DB.Utils.DBDouble(dr["heavy_metal_corr_factor"]);
                                ka.cev.upper_mass_limit = DB.Utils.DBDouble(dr["upper_mass_limit"]);
                                ka.cev.lower_mass_limit = DB.Utils.DBDouble(dr["lower_mass_limit"]);
                            }
                        }
                        break;

                    case AnalysisMethod.KnownM:
                        {
                            INCCMethodResults.results_known_m_rec res = (INCCMethodResults.results_known_m_rec)
                                m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                            ar.table = "results_known_m_rec";
                            dt = ar.GetCombinedResults(mid);
                            foreach (DataRow dr in dt.Rows)
                            {
                                res.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                                res.pu_mass = VTupleHelper.Make(dr, "pu_mass");
                                res.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                                res.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                                res.pass = DB.Utils.DBBool(dr["pass"]);
                                res.mult = DB.Utils.DBDouble(dr["mult"]);
                                res.alpha = DB.Utils.DBDouble(dr["alpha"]);
                                res.pu239e_mass = DB.Utils.DBDouble(dr["pu239e_mass"]);
                                res.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                                res.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                                INCCAnalysisParams.known_m_rec km = res.methodParams;
                                km.b = DB.Utils.DBDouble(dr["b"]);
                                km.c = DB.Utils.DBDouble(dr["c"]);
                                km.vs1 = DB.Utils.DBDouble(dr["vs1"]);
                                km.vs2 = DB.Utils.DBDouble(dr["vs2"]);
                                km.vi1 = DB.Utils.DBDouble(dr["vi1"]);
                                km.vi2 = DB.Utils.DBDouble(dr["vi2"]);
                                km.sigma_x = DB.Utils.DBDouble(dr["sigma_x"]);
                                km.sf_rate = DB.Utils.DBDouble(dr["sf_rate"]);
                                km.lower_mass_limit = DB.Utils.DBDouble(dr["lower_mass_limit"]);
                                km.upper_mass_limit = DB.Utils.DBDouble(dr["upper_mass_limit"]);
                            }
                        }
                        break;
                    case AnalysisMethod.Multiplicity:
                        {
                            INCCMethodResults.results_multiplicity_rec res = (INCCMethodResults.results_multiplicity_rec)
                                m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                            ar.table = "results_multiplicity_rec";
                            dt = ar.GetCombinedResults(mid);
                            foreach (DataRow dr in dt.Rows)
                            {
                                res.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                                res.pu_mass = VTupleHelper.Make(dr, "pu_mass");
                                res.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                                res.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                                res.pass = DB.Utils.DBBool(dr["pass"]);
                                res.mult = VTupleHelper.Make(dr, "mult");
                                res.alphaK = VTupleHelper.Make(dr, "alpha");
                                res.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                                res.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                                res.corr_factor = VTupleHelper.Make(dr, "corr_factor");
                                res.efficiencyComputed = VTupleHelper.Make(dr, "efficiency");
                                INCCAnalysisParams.multiplicity_rec mu = res.methodParams;
                                mu.solve_efficiency = (INCCAnalysisParams.MultChoice)DB.Utils.DBInt32(dr["solve_efficiency"]);
                                mu.sf_rate = DB.Utils.DBDouble(dr["sf_rate"]);
                                mu.vs1 = DB.Utils.DBDouble(dr["vs1"]);
                                mu.vs2 = DB.Utils.DBDouble(dr["vs2"]);
                                mu.vs3 = DB.Utils.DBDouble(dr["vs3"]);
                                mu.vi1 = DB.Utils.DBDouble(dr["vi1"]);
                                mu.vi2 = DB.Utils.DBDouble(dr["vi2"]);
                                mu.vi3 = DB.Utils.DBDouble(dr["vi3"]);
                                mu.a = DB.Utils.DBDouble(dr["a"]);
                                mu.b = DB.Utils.DBDouble(dr["b"]);
                                mu.c = DB.Utils.DBDouble(dr["c"]);
                                mu.sigma_x = DB.Utils.DBDouble(dr["sigma_x"]);
                                mu.alpha_weight = DB.Utils.DBDouble(dr["alpha_weight"]);
                                mu.multEffCorFactor = DB.Utils.DBDouble(dr["eff_cor"]);
                            }
                        }
                        break;
                    case AnalysisMethod.AddASource:
                        {
                            INCCMethodResults.results_add_a_source_rec res = (INCCMethodResults.results_add_a_source_rec)
                                m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                            ar.table = "results_add_a_source_rec";
                            dt = ar.GetCombinedResults(mid);
                            foreach (DataRow dr in dt.Rows)
                            {
                                res.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                                res.pu_mass = VTupleHelper.Make(dr, "pu_mass");
                                res.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                                res.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                                res.pass = DB.Utils.DBBool(dr["pass"]);
                                res.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                                res.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                                res.corr_doubles = VTupleHelper.Make(dr, "corr_doubles");
                                res.corr_factor = VTupleHelper.Make(dr, "corr_factor");
                                res.delta = VTupleHelper.Make(dr, "delta");
                                res.tm_doubles_bkg = VTupleHelper.Make(dr, "tm_doubles_bkg");
                                res.tm_uncorr_doubles = VTupleHelper.Make(dr, "tm_uncorr_doubles");
                                res.tm_corr_doubles = VTupleHelper.Make(dr, "tm_corr_doubles");
                                res.sample_avg_cf252_doubles = VTupleHelper.Make(dr, "sample_avg_cf252_doubles");
                                res.dzero_cf252_doubles = DB.Utils.DBDouble(dr["dzero_cf252_doubles"]);
                                res.sample_cf252_doubles = TupleArraySlurp(ref res.sample_cf252_doubles, "sample_cf252_doubles", dr);
                                res.sample_cf252_ratio = DB.Utils.ReifyDoubles((string)dr["sample_cf252_ratio"]);

                                INCCAnalysisParams.add_a_source_rec aas = res.methodParams;
                                CalCurveDBSnock(aas.cev, dr);
                                aas.dcl_mass = DB.Utils.ReifyDoubles((string)dr["dcl_mass"]);
                                aas.doubles = DB.Utils.ReifyDoubles((string)dr["doubles"]);
                                aas.cf.a = DB.Utils.DBDouble(dr["cf_a"]);
                                aas.cf.b = DB.Utils.DBDouble(dr["cf_b"]);
                                aas.cf.c = DB.Utils.DBDouble(dr["cf_c"]);
                                aas.cf.d = DB.Utils.DBDouble(dr["cf_d"]);
                                aas.dzero_avg = DB.Utils.DBDouble(dr["dzero_avg"]);
                                aas.num_runs = DB.Utils.DBUInt16(dr["num_runs"]);
                                aas.position_dzero = DB.Utils.ReifyDoubles((string)dr["position_dzero"]);
                                aas.dzero_ref_date = DB.Utils.DBDateTime(dr["dzero_ref_date"]);
                                aas.use_truncated_mult = DB.Utils.DBBool(dr["use_truncated_mult"]);
                                aas.tm_dbls_rate_upper_limit = DB.Utils.DBDouble(dr["tm_dbls_rate_upper_limit"]);
                                aas.tm_weighting_factor = DB.Utils.DBDouble(dr["tm_weighting_factor"]);
                            }
                        }
                        break;
                    case AnalysisMethod.Active:
                    {
                        INCCMethodResults.results_active_rec res = (INCCMethodResults.results_active_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_active_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.k0.v = DB.Utils.DBDouble(dr["k0"]);
                            res.k1 = VTupleHelper.Make(dr, "k1");
                            res.k = VTupleHelper.Make(dr, "k");
                            res.u235_mass = VTupleHelper.Make(dr, "u235_mass");
                            res.dcl_u235_mass = DB.Utils.DBDouble(dr["dcl_u235_mass"]);
                            res.u235_mass = VTupleHelper.Make(dr, "u235_mass");
                            res.dcl_minus_asy_u235_mass = VTupleHelper.Make(dr, "dcl_minus_asy_u235_mass");
                            res.dcl_minus_asy_u235_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_u235_mass_pct"]);
                            res.pass = DB.Utils.DBBool(dr["pass"]);

                            INCCAnalysisParams.active_rec a = res.methodParams;
                            CalCurveDBSnock(a.cev, dr);
                            a.dcl_mass = DB.Utils.ReifyDoubles((string)dr["dcl_mass"]);
                            a.doubles = DB.Utils.ReifyDoubles((string)dr["doubles"]);
                        }
                    }
                    break;
                    case AnalysisMethod.CuriumRatio:
                    {
                        INCCMethodResults.results_curium_ratio_rec res = (INCCMethodResults.results_curium_ratio_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_curium_ratio_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.cm_pu_ratio_decay_corr = VTupleHelper.Make(dr, "cm_pu_ratio_decay_corr");
                            res.cm_u_ratio_decay_corr = VTupleHelper.Make(dr, "cm_u_ratio_decay_corr");
                            res.cm_mass = VTupleHelper.Make(dr,"cm_mass");

                            INCCAnalysisParams.cm_pu_ratio_rec v = res.methodParams2;
                            v.cm_pu_ratio = VTupleHelper.Make(dr, "cm_pu_ratio");
                            v.cm_u_ratio = VTupleHelper.Make(dr, "cm_u_ratio");
                            v.pu_half_life = DB.Utils.DBDouble(dr["pu_half_life"]);
                            v.cm_pu_ratio_date = DB.Utils.DBDateTime(dr["cm_pu_ratio_date"]);
                            v.cm_id_label = dr["cm_id_label"].ToString();
                            v.cm_id = dr["cm_id"].ToString();
                            v.cm_input_batch_id = dr["cm_input_batch_id"].ToString();
                            v.cm_dcl_u_mass = DB.Utils.DBDouble(dr["dcl_u_mass"]);
                            v.cm_dcl_u235_mass = DB.Utils.DBDouble(dr["dcl_u235_mass"]);

                            INCCAnalysisParams.curium_ratio_rec cr = res.methodParams;
                            cr.curium_ratio_type = (INCCAnalysisParams.CuriumRatioVariant)DB.Utils.DBInt32(dr["curium_ratio_type"]);
                            CalCurveDBSnock(cr.cev, dr);

                            res.pu.pu240e_mass = VTupleHelper.Make(dr, "pu240e_mass");
                            res.pu.mass = VTupleHelper.Make(dr, "pu_mass");
                            res.pu.dcl_pu240e_mass = DB.Utils.DBDouble(dr["dcl_pu240e_mass"]);
                            res.pu.dcl_pu_mass = DB.Utils.DBDouble(dr["dcl_pu_mass"]);
                            res.pu.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                            res.pu.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                            res.pu.dcl_minus_asy_mass = VTupleHelper.Make(dr, "dcl_minus_asy_pu_mass");
                            res.pu.dcl_minus_asy_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_pu_mass_pct"]);
                            res.pu.pass = DB.Utils.DBBool(dr["pu_pass"]);

                            res.u.mass = VTupleHelper.Make(dr, "u_mass");
                            res.u.dcl_minus_asy_mass = VTupleHelper.Make(dr, "dcl_minus_asy_u_mass");
                            res.u.dcl_minus_asy_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_u_mass_pct"]);
                            res.u.dcl_mass = v.cm_dcl_u_mass;
                            res.u.pass = DB.Utils.DBBool(dr["u_pass"]);

                            res.u235.mass = VTupleHelper.Make(dr, "u235_mass");
                            res.u235.dcl_minus_asy_mass = VTupleHelper.Make(dr, "dcl_minus_asy_u235_mass");
                            res.u235.dcl_minus_asy_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_u235_mass_pct"]);
                            res.u235.dcl_mass = v.cm_dcl_u235_mass;
                        }
                    }
                    break;

                    case AnalysisMethod.Collar:
                    {
                        INCCMethodResults.results_collar_rec res = (INCCMethodResults.results_collar_rec)
                        m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_collar_rec";
                        dt = ar.GetCombinedResults(mid);  // results_collar_rec + collar_rec_m
                        long rid = 0;
                        if (dt.Rows.Count > 0)
                                rid = DB.Utils.DBInt64(dt.Rows[0]["rid"]);  // the results key (rid) relates the 3 collar params in the results to the typed collar results
                        else
                                continue;
                        DataTable dt_collar_detector_rec_m = ar.GetMethodResultsMethod(mid, rid, "collar_detector_rec");
                        DataTable dt_collar_k5_rec_m = ar.GetMethodResultsMethod(mid, rid, "collar_k5_rec");
                        for (int di = 0; di < dt.Rows.Count; di++)
                        {
                            DataRow dr = dt.Rows[di];
                            res.k0 = VTupleHelper.Make(dr, "k0");
                            res.k1 = VTupleHelper.Make(dr, "k1");
                            res.k2 = VTupleHelper.Make(dr, "k2");
                            res.k3 = VTupleHelper.Make(dr, "k3");
                            res.k4 = VTupleHelper.Make(dr, "k4");
                            res.k5 = VTupleHelper.Make(dr, "k5");
                            res.u235_mass = VTupleHelper.Make(dr, "u235_mass");
                            res.total_corr_fact = VTupleHelper.Make(dr, "total_corr_fact");
                            res.dcl_length = VTupleHelper.Make(dr, "dcl_length");
                            res.dcl_total_u235 = VTupleHelper.Make(dr, "dcl_total_u235");
                            res.dcl_total_u238 = VTupleHelper.Make(dr, "dcl_total_u238");
                            res.dcl_poison_percent = VTupleHelper.Make(dr, "dcl_poison_percent");
                            res.dcl_minus_asy_u235_mass = VTupleHelper.Make(dr, "dcl_minus_asy_u235_mass");
                            res.corr_doubles = VTupleHelper.Make(dr, "corr_doubles");
                            res.percent_u235 = DB.Utils.DBDouble(dr["percent_u235"]);
                            res.total_u_mass = DB.Utils.DBDouble(dr["total_u_mass"]);
                            res.dcl_total_rods = DB.Utils.DBDouble(dr["dcl_total_rods"]);
                            res.dcl_total_poison_rods = DB.Utils.DBDouble(dr["dcl_total_poison_rods"]);
                            res.dcl_minus_asy_u235_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_u235_mass_pct"]);
                            res.pass = DB.Utils.DBBool(dr["pass"]);
                            res.source_id = dr["source_id"].ToString();

                            INCCAnalysisParams.collar_combined_rec cr = res.methodParams;
                            CalCurveDBSnock(cr.collar.cev, dr);
                            cr.collar.collar_mode = DB.Utils.DBBool(dr["collar_mode"]);
                            cr.collar.number_calib_rods = DB.Utils.DBInt32(dr["number_calib_rods"]);
                            cr.collar.sample_corr_fact.v = DB.Utils.DBDouble(dr["sample_corr_fact"]);
                            cr.collar.sample_corr_fact.err = DB.Utils.DBDouble(dr["sample_corr_fact_err"]);
                            cr.collar.u_mass_corr_fact_a.v = DB.Utils.DBDouble(dr["u_mass_corr_fact_a"]);
                            cr.collar.u_mass_corr_fact_a.err = DB.Utils.DBDouble(dr["u_mass_corr_fact_a_err"]);
                            cr.collar.u_mass_corr_fact_b.v = DB.Utils.DBDouble(dr["u_mass_corr_fact_b"]);
                            cr.collar.u_mass_corr_fact_b.err = DB.Utils.DBDouble(dr["u_mass_corr_fact_b_err"]);
                            cr.collar.poison_absorption_fact = DB.Utils.ReifyDoubles(dr["poison_absorption_fact"].ToString());
                            cr.collar.poison_rod_type = DB.Utils.ReifyStrings(dr["poison_rod_type"].ToString());
                            TupleArraySlurp(ref cr.collar.poison_rod_a, "poison_rod_a", dr);
                            TupleArraySlurp(ref cr.collar.poison_rod_b, "poison_rod_b", dr);
                            TupleArraySlurp(ref cr.collar.poison_rod_c, "poison_rod_c", dr);

                            if (di < dt_collar_detector_rec_m.Rows.Count)
                                dr = dt_collar_detector_rec_m.Rows[di];
                            cr.collar_det.collar_mode = DB.Utils.DBBool(dr["collar_detector_mode"]);
                            cr.collar_det.reference_date = DB.Utils.DBDateTime(dr["reference_date"]);
                            cr.collar_det.relative_doubles_rate = DB.Utils.DBDouble(dr["relative_doubles_rate"]);

                            if (di < dt_collar_k5_rec_m.Rows.Count)
                                dr = dt_collar_k5_rec_m.Rows[di];
                            cr.k5.k5_mode = DB.Utils.DBBool(dr["k5_mode"]);
                            bool[] b = DB.Utils.ReifyBools(dr["k5_checkbox"].ToString());
                            for (int i = 0; i < b.Length && i < INCCAnalysisParams.MAX_COLLAR_K5_PARAMETERS; i++)
                                cr.k5.k5_checkbox[i] = b[i];
                            cr.k5.k5_item_type = string.Copy(m.INCCAnalysisState.Methods.selector.material);
                            string[] s = DB.Utils.ReifyStrings(dr["k5_label"].ToString());
                            for (int i = 0; i < s.Length && i < INCCAnalysisParams.MAX_COLLAR_K5_PARAMETERS; i++)
                                cr.k5.k5_label[i] = s[i];
                            TupleArraySlurp(ref cr.k5.k5, "k5", dr);
                       }
                    }
                    break;
                    case AnalysisMethod.ActiveMultiplicity:
                    {
                        INCCMethodResults.results_active_mult_rec res = (INCCMethodResults.results_active_mult_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_active_mult_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.mult = VTupleHelper.Make(dr, "mult");
                            res.methodParams.vf1 = DB.Utils.DBDouble(dr["vf1"]);
                            res.methodParams.vf2 = DB.Utils.DBDouble(dr["vf2"]);
                            res.methodParams.vf3 = DB.Utils.DBDouble(dr["vf3"]);
                            res.methodParams.vt1 = DB.Utils.DBDouble(dr["vt1"]);
                            res.methodParams.vt2 = DB.Utils.DBDouble(dr["vt2"]);
                            res.methodParams.vt3 = DB.Utils.DBDouble(dr["vt3"]);
                        }
                    }
                    break;
                    case AnalysisMethod.ActivePassive:
                    {
                        INCCMethodResults.results_active_passive_rec res = (INCCMethodResults.results_active_passive_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_active_passive_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.k0.v = DB.Utils.DBDouble(dr["k0"]);
                            res.k = VTupleHelper.Make(dr, "k");
                            res.k1 = VTupleHelper.Make(dr, "k1");
                            res.delta_doubles = VTupleHelper.Make(dr, "delta_doubles");
                            res.u235_mass = VTupleHelper.Make(dr, "u235_mass");
                            res.dcl_u235_mass = DB.Utils.DBDouble(dr["dcl_u235_mass"]);
                            res.dcl_minus_asy_u235_mass_pct = DB.Utils.DBDouble(dr["dcl_minus_asy_u235_mass_pct"]);
                            res.dcl_minus_asy_u235_mass = VTupleHelper.Make(dr, "dcl_minus_asy_u235_mass");
                            res.pass = DB.Utils.DBBool(dr["pass"]);

                            INCCAnalysisParams.active_passive_rec a = res.methodParams;
                            CalCurveDBSnock(a.cev, dr);
                        }
                    }
                    break;
                    case AnalysisMethod.TruncatedMultiplicity:
                    {
                        INCCMethodResults.results_truncated_mult_rec res = (INCCMethodResults.results_truncated_mult_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_truncated_mult_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.bkg.Singles = VTupleHelper.Make(dr, "bkg_singles");
                            res.bkg.Zeros = VTupleHelper.Make(dr, "bkg_zeros");
                            res.bkg.Ones = VTupleHelper.Make(dr, "bkg_ones");
                            res.bkg.Twos = VTupleHelper.Make(dr, "bkg_twos");
                            res.net.Singles = VTupleHelper.Make(dr, "net_singles");
                            res.net.Zeros = VTupleHelper.Make(dr, "net_zeros");
                            res.net.Ones = VTupleHelper.Make(dr, "net_ones");
                            res.net.Twos = VTupleHelper.Make(dr, "net_twos");

                            res.k.alpha = VTupleHelper.Make(dr, "k_alpha");
                            res.k.pu240e_mass = VTupleHelper.Make(dr, "k_pu240e_mass");
                            res.k.mass = VTupleHelper.Make(dr, "k_pu_mass");
                            res.k.dcl_pu240e_mass = DB.Utils.DBDouble(dr["k_dcl_pu240e_mass"]);
                            res.k.dcl_pu_mass = DB.Utils.DBDouble(dr["k_dcl_pu_mass"]);
                            res.k.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "k_dcl_minus_asy_pu_mass");
                            res.k.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["k_dcl_minus_asy_pu_mass_pct"]);
                            res.k.pass = DB.Utils.DBBool(dr["k_pass"]);

                            res.s.eff = VTupleHelper.Make(dr, "s_eff");
                            res.s.alpha = VTupleHelper.Make(dr, "s_alpha");
                            res.s.pu240e_mass = VTupleHelper.Make(dr, "s_pu240e_mass");
                            res.s.mass = VTupleHelper.Make(dr, "s_pu_mass");
                            res.s.dcl_pu240e_mass = DB.Utils.DBDouble(dr["s_dcl_pu240e_mass"]);
                            res.s.dcl_pu_mass = DB.Utils.DBDouble(dr["s_dcl_pu_mass"]);
                            res.s.dcl_minus_asy_pu_mass = VTupleHelper.Make(dr, "s_dcl_minus_asy_pu_mass");
                            res.s.dcl_minus_asy_pu_mass_pct = DB.Utils.DBDouble(dr["s_dcl_minus_asy_pu_mass_pct"]);
                            res.s.pass = DB.Utils.DBBool(dr["s_pass"]);

                            INCCAnalysisParams.truncated_mult_rec a = res.methodParams;
                            a.known_eff = DB.Utils.DBBool(dr["known_eff"]);
                            a.solve_eff = DB.Utils.DBBool(dr["vs1"]);
                            a.a = DB.Utils.DBDouble(dr["a"]);
                            a.b = DB.Utils.DBDouble(dr["b"]);						}
                    }
                    break;
                    case AnalysisMethod.DUAL_ENERGY_MULT_SAVE_RESTORE:
                    {
                        INCCMethodResults.results_de_mult_rec res = (INCCMethodResults.results_de_mult_rec)
                            m.INCCAnalysisResults.LookupMethodResults(mkey, m.INCCAnalysisState.Methods.selector, am, false);
                        ar.table = "results_de_mult_rec";
                        dt = ar.GetCombinedResults(mid);
                        foreach (DataRow dr in dt.Rows)
                        {
                            res.meas_ring_ratio = DB.Utils.DBDouble(dr["meas_ring_ratio"]);
                            res.interpolated_neutron_energy = DB.Utils.DBDouble(dr["interpolated_neutron_energy"]);
                            res.energy_corr_factor = DB.Utils.DBDouble(dr["energy_corr_factor"]);
                            INCCAnalysisParams.de_mult_rec a = res.methodParams;
                            a.inner_ring_efficiency = DB.Utils.DBDouble(dr["inner_ring_efficiency"]);
                            a.outer_ring_efficiency = DB.Utils.DBDouble(dr["outer_ring_efficiency"]);
                            a.neutron_energy = DB.Utils.ReifyDoubles(dr["neutron_energy"].ToString());
                            a.detector_efficiency = DB.Utils.ReifyDoubles(dr["detector_efficiency"].ToString());
                            a.inner_outer_ring_ratio = DB.Utils.ReifyDoubles(dr["inner_outer_ring_ratio"].ToString());
                            a.relative_fission = DB.Utils.ReifyDoubles(dr["relative_fission"].ToString());
                        }
                    }
                        break;
                    default:
                        NC.App.Pest.logger.TraceEvent(LogLevels.Warning, 34061, "Unimplemented DB restore of {0} calib results", am.FullName());
                        break;
                    }
                } // for
            }
        }