示例#1
0
        public PlateCalibration(
			CalibrationContext context,
			IAstrometrySettings astrometrySettings,
			IAstrometryController astrometryController)
        {
            m_Context = context;
            m_AstrometrySettings = astrometrySettings;
            m_AstrometryController = astrometryController;
        }
示例#2
0
        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);
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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"));
            }
        }
示例#5
0
        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;
        }
示例#6
0
        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;
        }