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; }
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; }