public bool LoadCalibration(TangraConfig.PersistedConfiguration configuration) { float maxVal = m_MasterSpectra.Points.Max(x => x.RawValue); SpectraPoint peakPoint = m_MasterSpectra.Points.SingleOrDefault(x => Math.Abs(maxVal - x.RawValue) < 0.00001); if (peakPoint != null) { switch (configuration.Order) { case 1: m_WavelengthCalibration = new LinearWavelengthCalibration(configuration.A, peakPoint.PixelNo, configuration.RMS); return(true); case 2: m_WavelengthCalibration = new QuadraticWavelengthCalibration(configuration.A, configuration.B, peakPoint.PixelNo, configuration.RMS); return(true); case 3: m_WavelengthCalibration = new CubicWavelengthCalibration(configuration.A, configuration.B, configuration.C, peakPoint.PixelNo, configuration.RMS); return(true); } } return(false); }
private void CalibrateWithRegression <TCalibration>() where TCalibration : IWavelengthCalibration, IRegressionWavelengthCalibration, new() { var calibration = new TCalibration(); for (int i = 0; i < 8; i++) { if (!float.IsNaN(m_PixelPos[i])) { calibration.AddDataPoint(m_PixelPos[i], m_Wavelengths[i]); } } try { calibration.Calibrate(); } catch (Exception ex) { Trace.WriteLine(ex.GetFullStackTrace()); MessageBox.Show("Calibration failed. Try a lower order polynomial.", "Tangra", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } m_WavelengthCalibration = calibration; }
private void Calibrate(int polynomialOrder) { if (polynomialOrder == 1) { if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && float.IsNaN(m_PixelPos[2])) { var calibration = new LinearWavelengthCalibration(); calibration.Calibrate(m_PixelPos[0], m_PixelPos[1], m_Wavelengths[0], m_Wavelengths[1]); m_WavelengthCalibration = calibration; } else if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2])) { CalibrateWithRegression <LinearWavelengthRegressionCalibration>(); } } else if (polynomialOrder == 2) { if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && float.IsNaN(m_PixelPos[3])) { var calibration = new QuadraticWavelengthCalibration(); calibration.Calibrate(m_PixelPos[0], m_PixelPos[1], m_PixelPos[2], m_Wavelengths[0], m_Wavelengths[1], m_Wavelengths[2]); m_WavelengthCalibration = calibration; } else if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && !float.IsNaN(m_PixelPos[3])) { CalibrateWithRegression <QuadraticWavelengthRegressionCalibration>(); } } else if (polynomialOrder == 3) { if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && !float.IsNaN(m_PixelPos[3]) && float.IsNaN(m_PixelPos[4])) { MessageBox.Show("At least 5 poins are required for a 3-rd order fit.", "Tangra", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && !float.IsNaN(m_PixelPos[3]) && !float.IsNaN(m_PixelPos[4])) { CalibrateWithRegression <CubicWavelengthRegressionCalibration>(); } } else if (polynomialOrder == 4) { if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && !float.IsNaN(m_PixelPos[3]) && !float.IsNaN(m_PixelPos[4]) && float.IsNaN(m_PixelPos[5])) { MessageBox.Show("At least 6 poins are required for a 4-rd order fit.", "Tangra", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (!float.IsNaN(m_PixelPos[0]) && !float.IsNaN(m_PixelPos[1]) && !float.IsNaN(m_PixelPos[2]) && !float.IsNaN(m_PixelPos[3]) && !float.IsNaN(m_PixelPos[4]) && !float.IsNaN(m_PixelPos[5])) { CalibrateWithRegression <QuarticWavelengthRegressionCalibration>(); } } else { MessageBox.Show("Calibration of this order hasn't been implemented yet"); } }
public void Reset() { for (int i = 0; i < 8; i++) { m_PixelPos[i] = float.NaN; } m_WavelengthCalibration = null; }
public bool LoadCalibration(SpectraCalibration calibration) { LoadPoints(calibration); switch (calibration.FitType) { case "LinearWavelengthCalibration": m_WavelengthCalibration = new LinearWavelengthCalibration(calibration); return(true); case "QuadraticWavelengthCalibration": m_WavelengthCalibration = new QuadraticWavelengthCalibration(calibration); return(true); case "LinearWavelengthRegressionCalibration": m_WavelengthCalibration = new LinearWavelengthRegressionCalibration(calibration); return(true); case "QuadraticWavelengthRegressionCalibration": m_WavelengthCalibration = new QuadraticWavelengthRegressionCalibration(calibration); return(true); case "CubicWavelengthRegressionCalibration": m_WavelengthCalibration = new CubicWavelengthRegressionCalibration(calibration); return(true); case "QuarticWavelengthRegressionCalibration": m_WavelengthCalibration = new QuarticWavelengthRegressionCalibration(calibration); return(true); case "CubicWavelengthCalibration": m_WavelengthCalibration = new CubicWavelengthCalibration(calibration); return(true); } return(false); }
public SpectraCalibrator(MasterSpectra masterSpectra) { m_MasterSpectra = masterSpectra; m_WavelengthCalibration = null; Reset(); }