示例#1
0
        public static unsafe List<INCCInitialDataCalibrationFile> CalibFromDetectors(List<Detector> dets)
        {
            List<INCCInitialDataCalibrationFile> list = new List<INCCInitialDataCalibrationFile>();

            foreach(Detector det in dets)
            {
                INCCInitialDataCalibrationFile idcf = new INCCInitialDataCalibrationFile(NC.App.Loggers.Logger(LMLoggers.AppSection.Control), null);
                idcf.Name = det.Id.DetectorId;
                foreach (INCCDB.Descriptor desc in NC.App.DB.Materials.GetList())
                {
                    INCCSelector se = new INCCSelector(det.Id.DetectorId, desc.Name);
                    if (!NC.App.DB.DetectorMaterialAnalysisMethods.ContainsKey(se))
                        continue;

                    // do the method choice rec first
                    DetectorMaterialMethod dmm = new DetectorMaterialMethod(se.material, se.detectorid, INCC.METHOD_NONE);
                    idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveAMR(se));

             					// then do each method rec
                    AnalysisMethods ams = NC.App.DB.DetectorMaterialAnalysisMethods[se];
                    IEnumerator iter = ams.GetMethodEnumerator();
                    while (iter.MoveNext())
                    {
                        Tuple<AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor> md = (Tuple<AnalysisMethod, INCCAnalysisParams.INCCMethodDescriptor>)iter.Current;
                        dmm = new DetectorMaterialMethod(se.material, se.detectorid, (byte)NewTypeToOldMethodId(md.Item1));
                        switch(md.Item1)
                        {
                            case AnalysisMethod.KnownA:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveKA(se, md.Item2));
                                break;
                            case AnalysisMethod.CalibrationCurve:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveCC(se, md.Item2));
                                break;
                            case AnalysisMethod.KnownM:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveKM(se, md.Item2));
                                break;
                            case AnalysisMethod.Multiplicity:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveMult(se, md.Item2));
                                break;
                            case AnalysisMethod.TruncatedMultiplicity:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveTM(se, md.Item2));
                                break;
                            case AnalysisMethod.AddASource:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveAS(se, md.Item2));
                                break;
                            case AnalysisMethod.CuriumRatio:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveCR(se, md.Item2));
                                break;
                            case AnalysisMethod.Active:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveCA(se, md.Item2));
                                break;
                            case AnalysisMethod.ActivePassive:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveAP(se, md.Item2));
                                break;
                            case AnalysisMethod.ActiveMultiplicity:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveAM(se, md.Item2));
                                break;
                            case AnalysisMethod.DUAL_ENERGY_MULT_SAVE_RESTORE:
                                  idcf.DetectorMaterialMethodParameters.Add(dmm, Calib5.MoveDE(se, md.Item2));
                                break;
                            case AnalysisMethod.Collar:
                                try
                                {
                                      idcf.DetectorMaterialMethodParameters.
                                            Add(new DetectorMaterialMethod(se.material, se.detectorid, INCC.COLLAR_DETECTOR_SAVE_RESTORE), Calib5.MoveCD(se, md.Item2));
                                      idcf.DetectorMaterialMethodParameters.
                                            Add(new DetectorMaterialMethod(se.material, se.detectorid, INCC.COLLAR_SAVE_RESTORE), Calib5.MoveCO(se, md.Item2));
                                      idcf.DetectorMaterialMethodParameters.
                                            Add(new DetectorMaterialMethod(se.material, se.detectorid, INCC.COLLAR_K5_SAVE_RESTORE), Calib5.MoveCK(se, md.Item2));
                                }
                                catch (Exception e)
                                {
                                    NC.App.Loggers.Logger(LMLoggers.AppSection.Control).TraceEvent(LogLevels.Warning, 34102, "Collar xfer processing error {0} {1}", md.Item1.FullName(), e.Message);
                                }
                                break;
                            case AnalysisMethod.COLLAR_SAVE_RESTORE:
                            case AnalysisMethod.COLLAR_DETECTOR_SAVE_RESTORE:
                            case AnalysisMethod.COLLAR_K5_SAVE_RESTORE:
                                    NC.App.Loggers.Logger(LMLoggers.AppSection.Control).TraceEvent(LogLevels.Verbose, 34100, "Got '{0}' ", md.Item1.FullName());
                                break;
                            case AnalysisMethod.INCCNone:
                                break;
                            default:
                                break;
                        }
                    }
                }
                list.Add(idcf);
            }
            return list;
        }
示例#2
0
        INCCAnalysisParams.collar_combined_rec CollarEntryProcesser(INCCInitialDataCalibrationFile idcf, INCCSelector sel, byte mode)
        {
            DetectorMaterialMethod m1 = new DetectorMaterialMethod(sel.material, sel.detectorid, INCC.COLLAR_DETECTOR_SAVE_RESTORE); m1.extra = mode;
            DetectorMaterialMethod m2 = new DetectorMaterialMethod(sel.material, sel.detectorid, INCC.COLLAR_SAVE_RESTORE); m2.extra = mode;
            DetectorMaterialMethod m3 = new DetectorMaterialMethod(sel.material, sel.detectorid, INCC.COLLAR_K5_SAVE_RESTORE); m3.extra = mode;

            KeyValuePair<DetectorMaterialMethod, object> k1, k2, k3;
            bool ok = idcf.DetectorMaterialMethodParameters.GetPair(m1, out k1);
            if (!ok)
            {
                mlogger.TraceEvent(LogLevels.Verbose, 30811, "No collar detector values for " + m1.ToString());
                ok = idcf.DetectorMaterialMethodParameters.GetPair(m2, out k2);
                if (ok)
                {
                    // k5 and collar but no det entry, find the closest match det entry and make a fake one and use it
                    List<KeyValuePair<DetectorMaterialMethod, object>> l = idcf.DetectorMaterialMethodParameters.GetDetectorsWithEntries;
                    if (l.Count > 0)
                    {
                        object o = l[0].Value;
                        collar_detector_rec rec = MakeAFake((collar_detector_rec)o, sel.detectorid, sel.material);
                        DetectorMaterialMethod mf1 = new DetectorMaterialMethod(sel.material, sel.detectorid, INCC.COLLAR_DETECTOR_SAVE_RESTORE); mf1.extra = mode;
                        k1 = new KeyValuePair<DetectorMaterialMethod, object>(mf1, rec);
                    }
                    else
                        return null;
                }
                else
                {
                    mlogger.TraceEvent(LogLevels.Verbose, 30812, "No collar values for " + m2.ToString());
                    return null;
                }
            }
            else
            {
                ok = idcf.DetectorMaterialMethodParameters.GetPair(m2, out k2);
                if (!ok)
                {
                    mlogger.TraceEvent(LogLevels.Verbose, 30812, "No collar values for " + m2.ToString());
                    return null;
                }
            }
            ok = idcf.DetectorMaterialMethodParameters.GetPair(m3, out k3);
            if (!ok)
            {
                mlogger.TraceEvent(LogLevels.Verbose, 30813, "No k5 values for " + m3.ToString());
                return null;
            }
            collar_rec collar;
            collar_detector_rec collar_detector;
            collar_k5_rec collar_k5;
            if (k1.Key.extra == -1)
                return null;
            collar_detector = (collar_detector_rec)k1.Value;
            if (k2.Key.extra == -1)
                return null;
            collar = (collar_rec)k2.Value;
            if (k3.Key.extra == -1)
                return null;
            collar_k5 = (collar_k5_rec)k3.Value;
            // got the three
            INCCAnalysisParams.collar_combined_rec combined = new INCCAnalysisParams.collar_combined_rec();
            ushort bonk = 0;
            CollarDet(combined, collar_detector, bonk);
            bonk = 1;
            CollarParm(combined, collar, bonk);
            bonk = 2;
            CollarK5(combined, collar_k5, bonk);
            bonk = 3;

            k1.Key.extra = -1;
            k2.Key.extra = -1;
            k3.Key.extra = -1;
            return combined;
        }