Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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");
            }
        }
Beispiel #4
0
        public void Reset()
        {
            for (int i = 0; i < 8; i++)
            {
                m_PixelPos[i] = float.NaN;
            }

            m_WavelengthCalibration = null;
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 public SpectraCalibrator(MasterSpectra masterSpectra)
 {
     m_MasterSpectra         = masterSpectra;
     m_WavelengthCalibration = null;
     Reset();
 }