/// <summary>
        /// Find again absorbtion edge wavelength around clicked point.
        /// Rewrite corresponding temperature and time.
        /// </summary>
        /// <param name="clickedWavelength"></param>
        public double AnalyzeMeasurement(double clickedWavelength)
        {
            // clickedWavelength => clickedIndex.
            // Apply any defensive coding here as necessary.
            var wavelengths   = MSpectraProcessor.Wavelengths;
            var minDifference = double.MaxValue;
            int clickedIndex  = 0;

            for (int i = 0; i < wavelengths.Length; i++)
            {
                double difference = Math.Abs(wavelengths[i] - clickedWavelength);
                if (difference < minDifference)
                {
                    minDifference = difference;
                    clickedIndex  = i;
                }
            }
            MTemperatureHistory.RemoveLast();
            MSpectraProcessor.MaxDerivativeIndex = clickedIndex;
            MSpectraProcessor.OnDataReady(reanalyze: true);

            // RETRIGGER ANALYSE MEASUREMENT

            return(AnalyzeMeasurement());
        }
        /// <summary>
        /// ExposureFinished event => Read and write spectrum.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Spectrometer_ExposureFinished(object sender, Spectrometer.ExposureFinishedEventArgs e)
        {
            MSpectraProcessor.AddSpectra(
                wavelengths: Spectrometer.Wavelengths,
                intensities: Array.ConvertAll(Spectrometer.Intensities, v => (double)v),
                ticks: Spectrometer.Time.Ticks);

            if (mParameters.AutoExposureTime)
            {
                Front.LabelBoldAutoExposureTime(e.Adapted);
                Front.ExposureTime = e.ExposureTime;
            }
        }
        /// <summary>
        /// Return last temperature.
        /// </summary>
        /// <param name="fileNames"></param>
        /// <returns></returns>
        public double BtnLoadSpectra(string[] fileNames)
        {
            MSpectraProcessor.SpectraToLoad = 1;  // No averaging.

            double temperature = -1;
            bool   save        = mParameters.Save; // Just load, no saving. Add 'siletn' AddSpectra().

            mParameters.Save = false;
            foreach (string file in fileNames)
            {
                DateTime modification = File.GetLastWriteTime(file);
                var      waveIntens   = LoadData(file);

                MSpectraProcessor.AddSpectra(
                    wavelengths: waveIntens.Item1,
                    intensities: waveIntens.Item2,
                    ticks: modification.Ticks);

                MSpectraProcessor.MaxDerivativeIndex = null;
                temperature = AnalyzeMeasurement();
            }
            mParameters.Save = save;  // Reset.
            return(temperature);
        }