public override void MouseClick(object sender, MouseEventArgs e) { int x1 = m_StateManager.GetSpectraPixelNoFromMouseCoordinates(e.Location); m_SelectedPoint = m_MasterSpectra.Points.SingleOrDefault(x => x.PixelNo == x1); if (m_SelectedPoint != null) { m_SelectedPointPos = m_SelectedPoint.PixelNo; if (Control.ModifierKeys != Keys.Control) { // Find the local maximum or minimum List <SpectraPoint> pointsInArea = m_MasterSpectra.Points.Where(x => x.PixelNo >= m_SelectedPoint.PixelNo - SEARCH_AREA_WING && x.PixelNo <= m_SelectedPoint.PixelNo + SEARCH_AREA_WING).ToList(); float maxValue = float.MinValue; int maxPixelNo = m_SelectedPoint.PixelNo; float minValue = float.MaxValue; int minPixelNo = m_SelectedPoint.PixelNo; foreach (var spectraPoint in pointsInArea) { if (spectraPoint.RawValue > maxValue) { maxValue = spectraPoint.RawValue; maxPixelNo = spectraPoint.PixelNo; } if (spectraPoint.RawValue < minValue) { minValue = spectraPoint.RawValue; minPixelNo = spectraPoint.PixelNo; } } // Check if local maximum or minimum if (minPixelNo != m_SelectedPoint.PixelNo && minPixelNo > m_SelectedPoint.PixelNo - SEARCH_AREA_WING && minPixelNo < m_SelectedPoint.PixelNo + SEARCH_AREA_WING) { m_SelectedPoint = m_MasterSpectra.Points.Single(x => x.PixelNo == minPixelNo); } else if (maxPixelNo != m_SelectedPoint.PixelNo && maxPixelNo > m_SelectedPoint.PixelNo - SEARCH_AREA_WING && maxPixelNo < m_SelectedPoint.PixelNo + SEARCH_AREA_WING) { m_SelectedPoint = m_MasterSpectra.Points.Single(x => x.PixelNo == maxPixelNo); } if (Control.ModifierKeys == Keys.Shift) { // NOTE: Doing a 2-nd order polynomial fit to find the sub-pixel location of the minima var cal = new MinimaFinder(); pointsInArea = m_MasterSpectra.Points.Where(x => x.PixelNo >= m_SelectedPoint.PixelNo - SEARCH_AREA_WING && x.PixelNo <= m_SelectedPoint.PixelNo + SEARCH_AREA_WING).ToList(); foreach (SpectraPoint point in pointsInArea) { cal.AddDataPoint(point.RawSignal, point.PixelNo); } cal.Calibrate(); m_SelectedPointPos = cal.GetMinimaCloseTo(m_SelectedPoint.PixelNo); if (float.IsNaN(m_SelectedPointPos)) { m_SelectedPointPos = m_SelectedPoint.PixelNo; } } else { m_SelectedPointPos = m_SelectedPoint.PixelNo; } } m_StateManager.Redraw(); m_SpectroscopyController.SelectPixel(m_SelectedPoint.PixelNo); EnsureEnterWavelengthForm(); } }
public override void MouseClick(object sender, MouseEventArgs e) { int x1 = m_StateManager.GetSpectraPixelNoFromMouseCoordinates(e.Location); m_SelectedPoint = m_MasterSpectra.Points.SingleOrDefault(x => x.PixelNo == x1); if (m_SelectedPoint != null) { m_SelectedPointPos = m_SelectedPoint.PixelNo; if (Control.ModifierKeys != Keys.Control) { // Find the local maximum or minimum List<SpectraPoint> pointsInArea = m_MasterSpectra.Points.Where(x => x.PixelNo >= m_SelectedPoint.PixelNo - SEARCH_AREA_WING && x.PixelNo <= m_SelectedPoint.PixelNo + SEARCH_AREA_WING).ToList(); float maxValue = float.MinValue; int maxPixelNo = m_SelectedPoint.PixelNo; float minValue = float.MaxValue; int minPixelNo = m_SelectedPoint.PixelNo; foreach (var spectraPoint in pointsInArea) { if (spectraPoint.RawValue > maxValue) { maxValue = spectraPoint.RawValue; maxPixelNo = spectraPoint.PixelNo; } if (spectraPoint.RawValue < minValue) { minValue = spectraPoint.RawValue; minPixelNo = spectraPoint.PixelNo; } } // Check if local maximum or minimum if (minPixelNo != m_SelectedPoint.PixelNo && minPixelNo > m_SelectedPoint.PixelNo - SEARCH_AREA_WING && minPixelNo < m_SelectedPoint.PixelNo + SEARCH_AREA_WING) m_SelectedPoint = m_MasterSpectra.Points.Single(x => x.PixelNo == minPixelNo); else if (maxPixelNo != m_SelectedPoint.PixelNo && maxPixelNo > m_SelectedPoint.PixelNo - SEARCH_AREA_WING && maxPixelNo < m_SelectedPoint.PixelNo + SEARCH_AREA_WING) m_SelectedPoint = m_MasterSpectra.Points.Single(x => x.PixelNo == maxPixelNo); if (Control.ModifierKeys == Keys.Shift) { // NOTE: Doing a 2-nd order polynomial fit to find the sub-pixel location of the minima var cal = new MinimaFinder(); pointsInArea = m_MasterSpectra.Points.Where(x => x.PixelNo >= m_SelectedPoint.PixelNo - SEARCH_AREA_WING && x.PixelNo <= m_SelectedPoint.PixelNo + SEARCH_AREA_WING).ToList(); foreach (SpectraPoint point in pointsInArea) cal.AddDataPoint(point.RawSignal, point.PixelNo); cal.Calibrate(); m_SelectedPointPos = cal.GetMinimaCloseTo(m_SelectedPoint.PixelNo); if (float.IsNaN(m_SelectedPointPos)) m_SelectedPointPos = m_SelectedPoint.PixelNo; } else m_SelectedPointPos = m_SelectedPoint.PixelNo; } m_StateManager.Redraw(); m_SpectroscopyController.SelectPixel(m_SelectedPoint.PixelNo); EnsureEnterWavelengthForm(); } }