コード例 #1
0
        public EnergyCalibration DoCalibration(EnergyCalibration CalibrationObject, out double[] XData, out double[] YData)
        {
            XData = null;
            YData = null;

            if (CalibrationObject != null && CalibrationObject.EnergyChannels != null)
            {
                List <double> x = new List <double>(), y = new List <double>();

                foreach (var item in CalibrationObject.EnergyChannels)
                {
                    if (item.Channel != null && item.Energy != null)
                    {
                        x.Add((double)item.Channel);
                        y.Add((double)item.Energy);
                    }
                }

                XData = x.ToArray();
                YData = y.ToArray();

                //Tuple<double, double> tuple = SimpleRegression.Fit(XData, YData);

                //CalibrationObject.CoefficientA = 0;//(float)tuple.Item1;
                //CalibrationObject.CoefficientB = (float)tuple.Item1;
                //CalibrationObject.CoefficientC = (float)tuple.Item2;//0;

                double A, B, C;

                MathUtility.SolveLeastSquareCoefficient(XData, YData, out A, out B, out C);

                CalibrationObject.CoefficientA = (float)A;
                CalibrationObject.CoefficientB = (float)B;
                CalibrationObject.CoefficientC = (float)C;

                CalibrationObject.CalibrationTime = DateTime.Now;
            }

            return(CalibrationObject);
        }
コード例 #2
0
        public string SaveCalibration(EnergyCalibration CalibrationObject)
        {
            string sqlCommandText = ModuleConfiguration.SQL_CMD_InsertEnergyCalibration;

            IDictionary <string, object> sqlParams = new Dictionary <string, object>()
            {
                { "@ID", CalibrationObject.ID },
                { "@Time", CalibrationObject.CalibrationTime },
                { "@OperatorID", CalibrationObject.OperatorID },
                { "@InstrumentNo", CalibrationObject.InsturmentSerial },
                { "@NuclideBoardNo", CalibrationObject.NuclideBoardSerial },
                { "@EnergyResolution", CalibrationObject.EngergyResolution },
                { "@CoefficientA", CalibrationObject.CoefficientA },
                { "@CoefficientB", CalibrationObject.CoefficientB },
                { "@CoefficientC", CalibrationObject.CoefficientC },
            };

            if (CalibrationObject.EnergyChannels != null && CalibrationObject.EnergyChannels.Count > 0)
            {
                for (int i = 0; i < CalibrationObject.EnergyChannels.Count; i++)
                {
                    sqlParams.Add($"@Energy{i + 1}", CalibrationObject.EnergyChannels[i].Energy);
                    sqlParams.Add($"@Channel{i + 1}", CalibrationObject.EnergyChannels[i].Channel);
                }

                //if (CalibrationObject.EnergyChannels.Count < 5)
                //{
                //    for (int i = CalibrationObject.EnergyChannels.Count; i < 5; i++)
                //    {
                //        sqlParams.Add($"@Energy{i + 1}", 0);
                //        sqlParams.Add($"@Channel{i + 1}", 0);
                //    }
                //}
            }

            this.dmlOperable.ExeSql(sqlCommandText, sqlParams);

            return(CalibrationObject.ID);
        }
コード例 #3
0
        public IDictionary <int, Core.DomainModel.Nuclide> RecognizeNuclide(int[] Channels, IList <Core.DomainModel.Nuclide> Nuclides, EnergyCalibration EnergyCalibration)
        {
            IDictionary <int, Core.DomainModel.Nuclide> results = null;

            if (Channels != null && Nuclides != null)
            {
                results = new Dictionary <int, Core.DomainModel.Nuclide>();

                foreach (int channel in Channels)
                {
                    foreach (var nuclide in Nuclides)
                    {
                        var nuclideChannels = nuclide.EnergyChannels.Where(en => en.Channel == channel).ToList();

                        if (nuclideChannels != null && nuclideChannels.Count() > 0)
                        {
                            if (!results.ContainsKey(channel))
                            {
                                for (int i = 0; i < nuclide.EnergyChannels.Count; i++)
                                {
                                    nuclide.EnergyChannels[i].Energy = (float?)MathUtility.Compute(new double[] { (double)channel }, (double)EnergyCalibration.CoefficientA, (double)EnergyCalibration.CoefficientB, (double)EnergyCalibration.CoefficientC)[0];
                                    nuclide.Credibility = 1;
                                }

                                results.Add(channel, nuclide);
                            }
                        }
                    }
                }
            }

            return(results);
        }