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