private void RecomputeData() { NumericUpDown[] targetApertures = new NumericUpDown[] { nudAperture1, nudAperture2, nudAperture3, nudAperture4 }; NumericUpDown[] targetFitAreas = new NumericUpDown[] { nudFitArea1, nudFitArea2, nudFitArea3, nudFitArea4 }; PictureBox[] psfBoxes = new PictureBox[] { picTarget1PSF, picTarget2PSF, picTarget3PSF, picTarget4PSF }; MeasurementsHelper measurer = new MeasurementsHelper( m_Context.BitPix, m_Context.BackgroundMethod, TangraConfig.Settings.Photometry.SubPixelSquareSize, TangraConfig.Settings.Photometry.Saturation.GetSaturationForBpp(m_Context.BitPix, m_Context.MaxPixelValue)); for (int i = 0; i < m_Header.ObjectCount; i++) { // Apply the selected filter, compute the PSF and then draw the data LCMeasurement reading = m_SelectedMeasurements[i]; if (!LCMeasurement.IsEmpty(reading)) { LCMeasurement updatedReading = reading.Clone(); int x0Int = (int)Math.Round(reading.X0); int y0Int = (int)Math.Round(reading.Y0); updatedReading.PsfFit = new PSFFit(x0Int, y0Int); updatedReading.PsfFit.FittingMethod = PSFFittingMethod.NonLinearFit; int pixelDataWidth = updatedReading.PixelData.GetLength(0); int pixelDataHeight = updatedReading.PixelData.GetLength(1); updatedReading.PsfFit.Fit( updatedReading.PixelData, m_Footer.TrackedObjects[updatedReading.TargetNo].PsfFitMatrixSize, x0Int - updatedReading.PixelDataX0 + (pixelDataWidth / 2) + 1, y0Int - updatedReading.PixelDataY0 + (pixelDataHeight / 2) + 1, false); int fitArea = (int)targetFitAreas[i].Value; measurer.FindBestFit( reading.X0, reading.Y0, GetCurrentFilter(), reading.PixelData, m_Context.BitPix, ref fitArea, m_Header.FixedApertureFlags[i]); updatedReading.PsfFit = measurer.FoundBestPSFFit; updatedReading.PixelData = measurer.PixelData; m_SelectedMeasurements[i] = updatedReading; psfBoxes[reading.TargetNo].Visible = true; PlotSingleGaussian( psfBoxes[reading.TargetNo], updatedReading, m_AllBrushes, (float)targetApertures[i].Value, m_Footer.ReductionContext.BitPix); } } }
public static MeasurementsHelper DoConfiguredMeasurement(uint[,] matrix, float aperture, int bitPixCamera, uint maxSignalValue, double bestFindTolerance, ref int matrixSize) { var measurer = new MeasurementsHelper( bitPixCamera, TangraConfig.BackgroundMethod.BackgroundMedian /* We always use Background Median for configuration measurements. */, TangraConfig.Settings.Photometry.SubPixelSquareSize, TangraConfig.Settings.Photometry.Saturation.GetSaturationForBpp(bitPixCamera, maxSignalValue)); measurer.SetCoreProperties( TangraConfig.Settings.Photometry.AnnulusInnerRadius, TangraConfig.Settings.Photometry.AnnulusMinPixels, TangraConfig.Settings.Special.RejectionBackgroundPixelsStdDev, 4.0f); measurer.BestMatrixSizeDistanceDifferenceTolerance = bestFindTolerance; MeasurementsHelper.Filter measurementFilter = MeasurementsHelper.Filter.None; switch (LightCurveReductionContext.Instance.DigitalFilter) { case TangraConfig.PreProcessingFilter.NoFilter: measurementFilter = MeasurementsHelper.Filter.None; break; case TangraConfig.PreProcessingFilter.LowPassFilter: measurementFilter = MeasurementsHelper.Filter.LP; break; case TangraConfig.PreProcessingFilter.LowPassDifferenceFilter: measurementFilter = MeasurementsHelper.Filter.LPD; break; } // This will also find the best PSFFit measurer.FindBestFit(9, 9, measurementFilter, matrix, bitPixCamera, ref matrixSize, false); return measurer; }