public PlateCalibration( CalibrationContext context, IAstrometrySettings astrometrySettings, IAstrometryController astrometryController) { m_Context = context; m_AstrometrySettings = astrometrySettings; m_AstrometryController = astrometryController; }
public static CalibrationContext Deserialize(byte[] data) { CalibrationContext ctx = new CalibrationContext(); BinaryFormatter fmt = new BinaryFormatter(); using (MemoryStream memStr = new MemoryStream(data)) using (StreamReader rdr = new StreamReader(memStr)) { int version = (int)fmt.Deserialize(memStr); if (version > 0) { object obj = fmt.Deserialize(memStr); try { ctx.PlateConfig = (AstroPlate)obj; } catch (Exception) { ctx.PlateConfig = AstroPlate.FromReflectedObject(obj); } obj = fmt.Deserialize(memStr); try { ctx.StarMap = (StarMap)obj; } catch (Exception) { ctx.StarMap = Tangra.Model.Astro.StarMap.FromReflectedObject(obj); } int top = (int)fmt.Deserialize(memStr); int left = (int)fmt.Deserialize(memStr); int width = (int)fmt.Deserialize(memStr); int height = (int)fmt.Deserialize(memStr); ctx.FitExcludeArea = new Rectangle(top, left, width, height); obj = fmt.Deserialize(memStr); try { ctx.FieldSolveContext = (FieldSolveContext)obj; } catch (Exception) { ctx.FieldSolveContext = FieldSolveContext.FromReflectedObject(obj); } if (version > 1) { bool noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.PreliminaryFit = (DirectTransRotAstrometry)obj; } catch (Exception) { ctx.PreliminaryFit = DirectTransRotAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.FirstAstrometricFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.FirstAstrometricFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.SecondAstrometricFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.SecondAstrometricFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.DistanceBasedFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.DistanceBasedFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.ImprovedDistanceBasedFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.ImprovedDistanceBasedFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } if (version > 2) { FocalLengthFit flf = null; noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { flf = (FocalLengthFit)obj; } catch (Exception) { flf = FocalLengthFit.FromReflectedObject(obj); } } ctx.ConstantsSolver = new PlateConstantsSolver(ctx.PlateConfig); ctx.ConstantsSolver.SetFocalLengthFit(flf); } } else { ctx.PreliminaryFit = (DirectTransRotAstrometry)fmt.Deserialize(memStr); } } } return(ctx); }
internal void OnUnsuccessfulCalibration(CalibrationContext context, PlateCalibration plateCalibration) { m_PlateToReport = null; try { string tempFilename = Path.GetTempFileName(); plateCalibration.SaveContext(tempFilename); string zippedFileName = Path.GetFullPath(tempFilename + ".zip"); ZipUnzip.Zip(tempFilename, zippedFileName); m_PlateToReport = File.ReadAllBytes(zippedFileName); File.Delete(tempFilename); File.Delete(zippedFileName); } catch (Exception ex) { Trace.WriteLine(ex); } if (m_PlateToReport != null) { double mbSize = m_PlateToReport.Length * 1.0 / (1024 * 1024); btnSendProblemFit.Text = string.Format("Report Unsolved Plate ({0} Mb)", mbSize.ToString("0.00")); btnSendProblemFit.Visible = true; } }
internal void OnSuccessfulCalibration(CalibrationContext context) { UpdateState(3); if (context.ImprovedDistanceBasedFit != null) { double onePixX = context.ImprovedDistanceBasedFit.GetDistanceInArcSec(context.PlateConfig.CenterXImage, context.PlateConfig.CenterYImage, context.PlateConfig.CenterXImage + 1, context.PlateConfig.CenterYImage); double onePixY = context.ImprovedDistanceBasedFit.GetDistanceInArcSec(context.PlateConfig.CenterXImage, context.PlateConfig.CenterYImage, context.PlateConfig.CenterXImage, context.PlateConfig.CenterYImage + 1); lblPixSize.Text = string.Format("1 pix: (X) = {0}\" Y = {1}\"", onePixX.ToString("0.00"), onePixY.ToString("0.00")); lblStdDevRa.Text = string.Format("Std.Dev.RA = {0}\"", context.ImprovedDistanceBasedFit.m_StdDevRAArcSec.ToString("0.00")); lblStdDevDe.Text = string.Format("Std.Dev.DE = {0}\"", context.ImprovedDistanceBasedFit.m_StdDevDEArcSec.ToString("0.00")); } }
public static CalibrationContext Deserialize(byte[] data) { CalibrationContext ctx = new CalibrationContext(); BinaryFormatter fmt = new BinaryFormatter(); using (MemoryStream memStr = new MemoryStream(data)) using (StreamReader rdr = new StreamReader(memStr)) { int version = (int)fmt.Deserialize(memStr); if (version > 0) { object obj = fmt.Deserialize(memStr); try { ctx.PlateConfig = (AstroPlate)obj; } catch (Exception) { ctx.PlateConfig = AstroPlate.FromReflectedObject(obj); } obj = fmt.Deserialize(memStr); try { ctx.StarMap = (StarMap)obj; } catch (Exception) { ctx.StarMap = Tangra.Model.Astro.StarMap.FromReflectedObject(obj); } int top = (int)fmt.Deserialize(memStr); int left = (int)fmt.Deserialize(memStr); int width = (int)fmt.Deserialize(memStr); int height = (int)fmt.Deserialize(memStr); ctx.FitExcludeArea = new Rectangle(top, left, width, height); obj = fmt.Deserialize(memStr); try { ctx.FieldSolveContext = (FieldSolveContext)obj; } catch(Exception) { ctx.FieldSolveContext = FieldSolveContext.FromReflectedObject(obj); } if (version > 1) { bool noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.PreliminaryFit = (DirectTransRotAstrometry)obj; } catch (Exception) { ctx.PreliminaryFit = DirectTransRotAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.FirstAstrometricFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.FirstAstrometricFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.SecondAstrometricFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.SecondAstrometricFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.DistanceBasedFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.DistanceBasedFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { ctx.ImprovedDistanceBasedFit = (LeastSquareFittedAstrometry)obj; } catch (Exception) { ctx.ImprovedDistanceBasedFit = LeastSquareFittedAstrometry.FromReflectedObject(obj); } } if (version > 2) { FocalLengthFit flf = null; noNull = (bool)fmt.Deserialize(memStr); if (noNull) { obj = fmt.Deserialize(memStr); try { flf = (FocalLengthFit)obj; } catch (Exception) { flf = FocalLengthFit.FromReflectedObject(obj); } } ctx.ConstantsSolver = new PlateConstantsSolver(ctx.PlateConfig); ctx.ConstantsSolver.SetFocalLengthFit(flf); } } else { ctx.PreliminaryFit = (DirectTransRotAstrometry)fmt.Deserialize(memStr); } } } return ctx; }
private void CompleteActivation() { m_VideoController.SetPictureBoxCursor(CustomCursors.PanCursor); m_FieldSolveContext = AstrometryContext.Current.FieldSolveContext; m_Image = m_AstrometryController.GetCurrentAstroPlate(); m_Image.EffectiveFocalLength = m_FieldSolveContext.FocalLength; m_RADegCenter = m_FieldSolveContext.RADeg; m_DEDegCenter = m_FieldSolveContext.DEDeg; StarCatalogueFacade facade = new StarCatalogueFacade(TangraConfig.Settings.StarCatalogue); m_CatalogueStars = facade.GetStarsInRegion( m_FieldSolveContext.RADeg, m_FieldSolveContext.DEDeg, 2.5 * m_Image.GetMaxFOVInArcSec() / 3600.0, m_FieldSolveContext.LimitMagn, (float)m_FieldSolveContext.Epoch); m_Eta = GetUserCameraConfigParam("rotation", 0.0); m_FLength = m_FieldSolveContext.FocalLength; m_Aspect = GetUserCameraConfigParam("aspect", 1.0); m_LimitMag = (int)Math.Round(m_FieldSolveContext.LimitMagn); m_ShowLabels = GetUserCameraConfigParam("labels", 0) == 1; m_Grid = GetUserCameraConfigParam("grid", 0) == 1; m_ShowMagnitudes = GetUserCameraConfigParam("magnitudes", 0) == 1; UpdateControls(); InitStarMap(); m_SolvedPlate = new DirectTransRotAstrometry(m_Image, m_FieldSolveContext.RADeg, m_FieldSolveContext.DEDeg, m_Eta, m_Aspect); m_CalibrationContext = new CalibrationContext(); m_CalibrationContext.StarMap = AstrometryContext.Current.StarMap; m_CalibrationContext.PreliminaryFit = m_SolvedPlate; m_FieldSolveContext.CatalogueStars = m_CatalogueStars; m_CalibrationContext.FieldSolveContext = m_FieldSolveContext; m_CalibrationContext.PlateConfig = m_Image; TangraConfig.AstrometrySettings calibrationSettings = TangraConfig.Settings.Astrometry.Clone(); calibrationSettings.MaxResidualInPixels = CorePyramidConfig.Default.CalibrationMaxResidualInPixels; calibrationSettings.PyramidDistanceToleranceInPixels = CorePyramidConfig.Default.CalibrationPyramidDistanceToleranceInPixels; calibrationSettings.MinimumNumberOfStars = CorePyramidConfig.Default.CalibrationNumberOfStars; m_PlateCalibrator = new PlateCalibration(m_CalibrationContext, calibrationSettings, m_AstrometryController); UpdateToolControlDisplay(); m_PlatesolveController.SetupControls(); m_SolveState = -1; DrawCatalogStarsFit(); m_State = FittingsState.Activated; }