Пример #1
0
 public TrackedObject(byte targetNo, TrackedObjectConfig originalObject)
     : base(targetNo, originalObject)
 {
     ThisFrameX = originalObject.ApertureStartingX;
     ThisFrameY = originalObject.ApertureStartingY;
     ThisFrameCertainty = originalObject.Gaussian != null ? (float)originalObject.Gaussian.Certainty : 0;
 }
Пример #2
0
 public TrackedObject(byte targetNo, TrackedObjectConfig originalObject)
     : base(targetNo, originalObject)
 {
     ThisFrameX         = originalObject.ApertureStartingX;
     ThisFrameY         = originalObject.ApertureStartingY;
     ThisFrameCertainty = originalObject.Gaussian != null ? (float)originalObject.Gaussian.Certainty : 0;
 }
Пример #3
0
        internal static TrackedObjectConfig Load(BinaryReader reader)
        {
            TrackedObjectConfig instance = new TrackedObjectConfig();

            byte version = reader.ReadByte();

            if (version > 0)
            {
                instance.TrackingType = (TrackingType)reader.ReadInt32();

                instance.MeasureThisObject    = reader.ReadBoolean();
                instance.ApertureInPixels     = reader.ReadSingle();
                instance.PsfFitMatrixSize     = reader.ReadInt32();
                instance.ApertureStartingX    = reader.ReadSingle();
                instance.ApertureStartingY    = reader.ReadSingle();
                instance.OriginalFieldCenterX = reader.ReadInt32();
                instance.OriginalFieldCenterY = reader.ReadInt32();

                bool hasGaussian = reader.ReadBoolean();
                if (hasGaussian)
                {
                    instance.Gaussian = PSFFit.Load(reader);
                }

                instance.PositionTolerance  = reader.ReadSingle();
                instance.IsWeakSignalObject = reader.ReadBoolean();
                instance.ApertureMatrixX0   = reader.ReadSingle();
                instance.ApertureMatrixY0   = reader.ReadSingle();
                instance.ApertureDX         = reader.ReadSingle();
                instance.ApertureDY         = reader.ReadSingle();

                instance.AutoStarsInArea = new List <PSFFit>();
                int autoStarsInArea = reader.ReadInt32();
                for (int i = 0; i < autoStarsInArea; i++)
                {
                    instance.AutoStarsInArea.Add(PSFFit.Load(reader));
                }

                if (version > 1)
                {
                    instance.RefinedFWHM = reader.ReadSingle();

                    if (version > 2)
                    {
                        instance.IsFixedAperture = reader.ReadBoolean();

                        if (version > 3)
                        {
                            instance.GroupId = reader.ReadInt32();
                        }
                    }
                }
            }

            return(instance);
        }
Пример #4
0
        public TrackedObjectBase(byte targetNo, TrackedObjectConfig originalObject)
        {
            TargetNo       = targetNo;
            OriginalObject = originalObject;

            ApertureArea     = Math.PI * originalObject.ApertureInPixels * originalObject.ApertureInPixels;
            IsOccultedStar   = OriginalObject.TrackingType == TrackingType.OccultedStar;
            PsfGroupId       = OriginalObject.GroupId;
            PsfFitMatrixSize = OriginalObject.PsfFitMatrixSize;
        }
Пример #5
0
        internal NativeSimplifiedTracker(int width, int height, List<TrackedObjectConfig> measuringStars, bool isFullDisappearance)
        {
            NativeTracking.ConfigureNativeTracker();

            var dataRange = PSFFittingDataRange.DataRange8Bit;

            switch (LightCurveReductionContext.Instance.BitPix)
            {
                case 8:
                    dataRange = PSFFittingDataRange.DataRange8Bit;
                    break;

                case 12:
                    dataRange = PSFFittingDataRange.DataRange12Bit;
                    break;

                case 14:
                    dataRange = PSFFittingDataRange.DataRange14Bit;
                    break;

                case 16:
                    dataRange = PSFFittingDataRange.DataRange16Bit;
                    break;

                default:
                    dataRange = PSFFittingDataRange.DataRange16Bit;
                    break;
            }

            NativeTracking.InitNewTracker(
                width,
                height,
                measuringStars.Count,
                LightCurveReductionContext.Instance.FullDisappearance,
                dataRange,
                (ushort)LightCurveReductionContext.Instance.MaxPixelValue);

            for (int i = 0; i < measuringStars.Count; i++)
            {
                TrackedObjectConfig obj = measuringStars[i];
                NativeTracking.ConfigureTrackedObject(i, obj);
                var nativeObj = new NativeTrackedObject(i, LightCurveReductionContext.Instance.BitPix, obj, isFullDisappearance);
                m_NativeTrackedObject.Add(nativeObj);
                m_TrackedObjects.Add(nativeObj);
            }

            m_OccultedStarConfig = measuringStars.Single(x => x.TrackingType == TrackingType.OccultedStar);
        }
Пример #6
0
        internal NativeSimplifiedTracker(int width, int height, List <TrackedObjectConfig> measuringStars, bool isFullDisappearance)
        {
            NativeTracking.ConfigureNativeTracker();

            var dataRange = PSFFittingDataRange.DataRange8Bit;

            switch (LightCurveReductionContext.Instance.BitPix)
            {
            case 8:
                dataRange = PSFFittingDataRange.DataRange8Bit;
                break;

            case 12:
                dataRange = PSFFittingDataRange.DataRange12Bit;
                break;

            case 14:
                dataRange = PSFFittingDataRange.DataRange14Bit;
                break;

            case 16:
                dataRange = PSFFittingDataRange.DataRange16Bit;
                break;

            default:
                dataRange = PSFFittingDataRange.DataRange16Bit;
                break;
            }

            NativeTracking.InitNewTracker(
                width,
                height,
                measuringStars.Count,
                LightCurveReductionContext.Instance.FullDisappearance,
                dataRange,
                (ushort)LightCurveReductionContext.Instance.MaxPixelValue);

            for (int i = 0; i < measuringStars.Count; i++)
            {
                TrackedObjectConfig obj = measuringStars[i];
                NativeTracking.ConfigureTrackedObject(i, obj);
                var nativeObj = new NativeTrackedObject(i, LightCurveReductionContext.Instance.BitPix, obj, isFullDisappearance);
                m_NativeTrackedObject.Add(nativeObj);
                m_TrackedObjects.Add(nativeObj);
            }

            m_OccultedStarConfig = measuringStars.Single(x => x.TrackingType == TrackingType.OccultedStar);
        }
Пример #7
0
 public MeasurmentGroup(float fwhm, TrackedObjectConfig firstObjectInGroup, int targetNo)
 {
     m_FWHM = fwhm;
     AddObjectInGroup(firstObjectInGroup, targetNo);
 }
Пример #8
0
 public void ObjectSelected(TrackedObjectConfig selectedObject, bool shift, bool ctrl)
 {
     m_CurrentStateObject.ObjectSelected(selectedObject, shift, ctrl, -1);
 }
Пример #9
0
        public TrackedObjectBase(byte targetNo, TrackedObjectConfig originalObject)
        {
            TargetNo = targetNo;
            OriginalObject = originalObject;

            ApertureArea = Math.PI * originalObject.ApertureInPixels * originalObject.ApertureInPixels;
            IsOccultedStar = OriginalObject.TrackingType == TrackingType.OccultedStar;
            PsfGroupId = OriginalObject.GroupId;
            PsfFitMatrixSize = OriginalObject.PsfFitMatrixSize;
        }
Пример #10
0
        internal frmAddOrEditSingleTarget(int objectId, TrackedObjectConfig selectedObject, LCStateMachine state, VideoController videoController)
        {
            InitializeComponent();

            m_VideoController = videoController;

            m_AutocenteredApertureAvailable = true;

            Text = "Edit Object";

            btnAdd.Text = "Save";
            btnDontAdd.Text = "Cancel";
            btnDelete.Visible = true;
            m_IsEdit = true;

            m_ObjectId = objectId;
            m_State = state;
            m_AstroImage = m_State.VideoOperation.m_StackedAstroImage;

            ObjectToAdd = selectedObject;

            if (selectedObject.TrackingType != TrackingType.ComparisonStar)
                nudFitMatrixSize.SetNUDValue(selectedObject.PsfFitMatrixSize);

            m_Center = new ImagePixel(
                selectedObject.OriginalFieldCenterX,
                selectedObject.OriginalFieldCenterY);

            if (ObjectToAdd.PositionTolerance > 0)
                nudPositionTolerance.SetNUDValue((decimal)ObjectToAdd.PositionTolerance);

            Initialize();

            if (!selectedObject.IsWeakSignalObject && !selectedObject.IsFixedAperture)
            {
                int matrixSize = selectedObject.PsfFitMatrixSize;
                GetFitInMatrix(selectedObject.Gaussian, ref matrixSize, selectedObject.ApertureInPixels);
                selectedObject.PsfFitMatrixSize = matrixSize;
            }
            else
            {
                m_ProcessingPixels = m_AstroImage.GetMeasurableAreaPixels(m_Center);
                m_DisplayPixels = m_AstroImage.GetMeasurableAreaDisplayBitmapPixels(m_Center);

                m_FWHM = 6;
                m_Gaussian = null;
                m_X0 = selectedObject.ApertureMatrixX0;
                m_Y0 = selectedObject.ApertureMatrixY0;
                dx = selectedObject.ApertureDX;
                dy = selectedObject.ApertureDY;

                PlotSingleTargetPixels();

                nudAperture1.SetNUDValue((decimal) Math.Round(ObjectToAdd.ApertureInPixels, 2));
            }

            SetHeightAndType();

            if (selectedObject.TrackingType == TrackingType.GuidingStar)
                SelectedObjectType = TrackingType.GuidingStar;
            else if (selectedObject.TrackingType == TrackingType.OccultedStar)
                SelectedObjectType = TrackingType.OccultedStar;
        }
Пример #11
0
 public TrackedObjectLight(byte targetNo, TrackedObjectConfig originalObject)
     : base(targetNo, originalObject)
 {
     Center = new ImagePixel(originalObject.OriginalFieldCenterX, originalObject.OriginalFieldCenterY);
 }
        internal frmAddOrEditMutualEventsTarget(int objectId, TrackedObjectConfig selectedObject, LCStateMachine state, VideoController videoController)
        {
            InitializeComponent();

            m_VideoController = videoController;

            Text = "Edit 'Mutual Event' Target";
            btnAdd.Text = "Save";
            btnDontAdd.Text = "Cancel";
            btnDelete.Visible = true;
            m_IsEdit = true;

            m_ObjectId = objectId;
            m_State = state;
            m_AstroImage = m_VideoController.GetCurrentAstroImage(false);

            ObjectToAdd = selectedObject;

            float? commonAperture = m_State.MeasuringApertures.Count > 0
                ? m_State.MeasuringApertures[0] :
                (float?)null;

            m_Aperture = commonAperture;
            m_Aperture1 = commonAperture;
            m_Aperture2 = commonAperture;

            m_Center = new ImagePixel(selectedObject.ApertureStartingX, selectedObject.ApertureStartingY);
            m_OriginalCenter = new ImagePixel(selectedObject.ApertureStartingX, selectedObject.ApertureStartingY);

            if (selectedObject.ProcessInPsfGroup)
            {
                m_GroupId = selectedObject.GroupId;

                List<TrackedObjectConfig> otherGroupedObjects = state.m_MeasuringStars.Where(x => m_GroupId >= 0 && x.GroupId == m_GroupId && x != selectedObject).ToList();
                if (otherGroupedObjects.Count == 1)
                {
                    ObjectToAdd2 = otherGroupedObjects[0];
                    m_ObjectId2 = state.m_MeasuringStars.IndexOf(ObjectToAdd2);
                }
            }
            else
            {
                ObjectToAdd2 = null;
                m_GroupId = objectId;
                // If we are to use a second object, it should have the next available Id
                m_ObjectId2 = state.m_MeasuringStars.Count;
            }

            m_EditingOccultedStar = selectedObject.IsOcultedStar();

            Initialise();
        }
Пример #13
0
        internal static TrackedObjectConfig Load(BinaryReader reader)
        {
            TrackedObjectConfig instance = new TrackedObjectConfig();

            byte version = reader.ReadByte();
            if (version > 0)
            {
                instance.TrackingType = (TrackingType)reader.ReadInt32();

                instance.MeasureThisObject = reader.ReadBoolean();
                instance.ApertureInPixels = reader.ReadSingle();
                instance.PsfFitMatrixSize = reader.ReadInt32();
                instance.ApertureStartingX = reader.ReadSingle();
                instance.ApertureStartingY = reader.ReadSingle();
                instance.OriginalFieldCenterX = reader.ReadInt32();
                instance.OriginalFieldCenterY = reader.ReadInt32();

                bool hasGaussian = reader.ReadBoolean();
                if (hasGaussian)
                    instance.Gaussian = PSFFit.Load(reader);

                instance.PositionTolerance = reader.ReadSingle();
                instance.IsWeakSignalObject = reader.ReadBoolean();
                instance.ApertureMatrixX0 = reader.ReadSingle();
                instance.ApertureMatrixY0 = reader.ReadSingle();
                instance.ApertureDX = reader.ReadSingle();
                instance.ApertureDY = reader.ReadSingle();

                instance.AutoStarsInArea = new List<PSFFit>();
                int autoStarsInArea = reader.ReadInt32();
                for (int i = 0; i < autoStarsInArea; i++)
                {
                    instance.AutoStarsInArea.Add(PSFFit.Load(reader));
                }

                if (version > 1)
                {
                    instance.RefinedFWHM = reader.ReadSingle();

                    if (version > 2)
                    {
                        instance.IsFixedAperture = reader.ReadBoolean();

                        if (version > 3)
                        {
                            instance.GroupId = reader.ReadInt32();
                        }
                    }
                }
            }

            return instance;
        }
Пример #14
0
 internal static void ConfigureTrackedObject(int objectId, TrackedObjectConfig obj)
 {
     TrackerConfigureObject(
         objectId,
         obj.IsFixedAperture,
         obj.TrackingType == TrackingType.OccultedStar,
         obj.ApertureStartingX,
         obj.ApertureStartingY,
         obj.ApertureInPixels);
 }
Пример #15
0
 public virtual void ObjectSelected(TrackedObjectConfig selectedObject, bool shift, bool ctrl, int selectedStarId)
 {
 }
Пример #16
0
 public void AddObjectInGroup(TrackedObjectConfig objectToAdd, int targetNo)
 {
     if (m_ObjectIds.IndexOf(targetNo) == -1)
     {
         m_ObjectsInGroup.Add(objectToAdd);
         m_ObjectIds.Add(targetNo);
     }
 }
Пример #17
0
        public bool IsCloseEnoughToBelongToTheGroup(TrackedObjectConfig objectToCheck)
        {
            foreach (TrackedObjectConfig existingObject in m_ObjectsInGroup)
            {
                double distance =
                    ImagePixel.ComputeDistance(existingObject.ApertureStartingX, objectToCheck.ApertureStartingX,
                                               existingObject.ApertureStartingY, objectToCheck.ApertureStartingY);

                if (distance < m_FWHM * TangraConfig.Settings.Special.MinDistanceForPhotometricGroupingInFWHM)
                {
                    return true;
                }
            }

            return false;
        }
        private void CopyDoubleObjectsToAdd()
        {
            // Add the first star (with bigger amplitude)
            ObjectToAdd = new TrackedObjectConfig();
            ObjectToAdd.ApertureInPixels = (float)nudAperture1.Value;
            ObjectToAdd.MeasureThisObject = true; /* We measure all objects (comparison or occulted), unless specified otherwise by the user */
            ObjectToAdd.ApertureMatrixX0 = m_X1;
            ObjectToAdd.ApertureMatrixY0 = m_Y1;
            ObjectToAdd.ApertureDX = 0;
            ObjectToAdd.ApertureDY = 0;

            ObjectToAdd.AutoStarsInArea.Clear();

            ObjectToAdd.OriginalFieldCenterX = m_Center.X;
            ObjectToAdd.OriginalFieldCenterY = m_Center.Y;

            ObjectToAdd.IsWeakSignalObject = false;

            ObjectToAdd.Gaussian = m_DoubleGaussian.GetGaussian1();
            ObjectToAdd.ApertureStartingX = m_X1Center;
            ObjectToAdd.ApertureStartingY = m_Y1Center;

            ObjectToAdd.GroupId = m_GroupId;

            if (rbOcculted.Checked && rbOccElc1.Checked)
            {
                ObjectToAdd.TrackingType = TrackingType.OccultedStar;
                ObjectToAdd.PositionTolerance = 2;
                if (ObjectToAdd.Gaussian != null)
                    // Correction for really large stars
                    ObjectToAdd.PositionTolerance += (float)(ObjectToAdd.Gaussian.FWHM / 2);

                ObjectToAdd.PsfFitMatrixSize = TangraConfig.Settings.Special.DefaultOccultedStarPsfFitMatrixSize;
            }
            else
            {
                ObjectToAdd.TrackingType = TrackingType.GuidingStar;
                ObjectToAdd.PsfFitMatrixSize = (int)TangraConfig.Settings.Special.DefaultComparisonStarPsfFitMatrixSize;
                ObjectToAdd.IsWeakSignalObject = false; // Must have a fit for a guiding star
            }

            // Add the second star (with bigger amplitude)
            ObjectToAdd2 = new TrackedObjectConfig();
            ObjectToAdd2.ApertureInPixels = (float)nudAperture1.Value;
            ObjectToAdd2.MeasureThisObject = true; /* We measure all objects (comparison or occulted), unless specified otherwise by the user */
            ObjectToAdd2.ApertureMatrixX0 = m_X2;
            ObjectToAdd2.ApertureMatrixY0 = m_Y2;
            ObjectToAdd2.ApertureDX = 0;
            ObjectToAdd2.ApertureDY = 0;

            ObjectToAdd2.AutoStarsInArea.Clear();

            ObjectToAdd2.OriginalFieldCenterX = m_Center.X;
            ObjectToAdd2.OriginalFieldCenterY = m_Center.Y;

            ObjectToAdd2.GroupId = m_GroupId;

            ObjectToAdd2.IsWeakSignalObject = false;

            ObjectToAdd2.Gaussian = m_DoubleGaussian.GetGaussian2();
            ObjectToAdd2.ApertureStartingX = m_X2Center;
            ObjectToAdd2.ApertureStartingY = m_Y2Center;

            if (rbOcculted.Checked && rbOccElc2.Checked)
            {
                ObjectToAdd2.TrackingType = TrackingType.OccultedStar;
                ObjectToAdd2.PositionTolerance = 2;
                if (ObjectToAdd.Gaussian != null)
                    // Correction for really large stars
                    ObjectToAdd2.PositionTolerance += (float)(ObjectToAdd.Gaussian.FWHM / 2);

                ObjectToAdd2.PsfFitMatrixSize = TangraConfig.Settings.Special.DefaultOccultedStarPsfFitMatrixSize;
            }
            else
            {
                ObjectToAdd2.TrackingType = TrackingType.GuidingStar;
                ObjectToAdd2.PsfFitMatrixSize = (int)TangraConfig.Settings.Special.DefaultComparisonStarPsfFitMatrixSize;
                ObjectToAdd2.IsWeakSignalObject = false; // Must have a fit for a guiding star
            }
        }
Пример #19
0
        internal void StartMeasurements()
        {
            MeasurementAreaWing = m_SpectroscopyController.SpectraReductionContext.MeasurementAreaWing;
            BackgroundAreaWing = m_SpectroscopyController.SpectraReductionContext.BackgroundAreaWing;
            BackgroundAreaGap = m_SpectroscopyController.SpectraReductionContext.BackgroundAreaGap;
            PixelValueCoefficient = m_SpectroscopyController.SpectraReductionContext.PixelValueCoefficient;

            var starToTrack = new TrackedObjectConfig()
            {
                ApertureInPixels = (float)(SelectedStarFWHM * 2),
                MeasureThisObject = false,
                ApertureDX = 0,
                ApertureDY = 0,

                Gaussian = m_SelectedStarGaussian,
                ApertureStartingX = (float)m_SelectedStarGaussian.XCenter,
                ApertureStartingY = (float)m_SelectedStarGaussian.YCenter,
                TrackingType = TrackingType.OccultedStar,
                IsWeakSignalObject = false
            };

            m_Tracker = new SpectroscopyStarTracker(starToTrack);

            m_OperationState = SpectroscopyState.RunningMeasurements;
            m_AllFramesSpectra.Clear();

            m_ControlPanel.MeasurementsStarted();

            m_FirstMeasuredFrame = null;
            m_CancelMeasurementsRequested = false;
            m_FramePlayer.Start(FramePlaySpeed.Fastest, null, 1);
        }
        private void CopyObjectToAdd()
        {
            ObjectToAdd = new TrackedObjectConfig();
            ObjectToAdd.ApertureInPixels = (float)nudAperture1.Value;
            ObjectToAdd.MeasureThisObject = true; /* We measure all objects (comparison or occulted), unless specified otherwise by the user */
            ObjectToAdd.ApertureMatrixX0 = m_X0;
            ObjectToAdd.ApertureMatrixY0 = m_Y0;
            ObjectToAdd.ApertureDX = 0;
            ObjectToAdd.ApertureDY = 0;

            ObjectToAdd.AutoStarsInArea.Clear();

            ObjectToAdd.OriginalFieldCenterX = m_Center.X;
            ObjectToAdd.OriginalFieldCenterY = m_Center.Y;

            ObjectToAdd.IsWeakSignalObject = false;

            ObjectToAdd.Gaussian = m_Gaussian;
            ObjectToAdd.ApertureStartingX = m_X0Center;
            ObjectToAdd.ApertureStartingY = m_Y0Center;

            ObjectToAdd.GroupId = -1;

            if (rbOcculted.Checked)
            {
                ObjectToAdd.TrackingType = TrackingType.OccultedStar;
                ObjectToAdd.PositionTolerance = 2;
                if (ObjectToAdd.Gaussian != null)
                    // Correction for really large stars
                    ObjectToAdd.PositionTolerance += (float)(ObjectToAdd.Gaussian.FWHM / 2);

                ObjectToAdd.PsfFitMatrixSize = TangraConfig.Settings.Special.DefaultOccultedStarPsfFitMatrixSize;
            }
            else
            {
                ObjectToAdd.TrackingType = TrackingType.GuidingStar;
                ObjectToAdd.PsfFitMatrixSize = (int)TangraConfig.Settings.Special.DefaultComparisonStarPsfFitMatrixSize;
                ObjectToAdd.IsWeakSignalObject = false; // Must have a fit for a guiding star
            }

            ObjectToAdd2 = null;
        }
Пример #21
0
        internal frmAddOrEditSingleTarget(int objectId, ImagePixel center, PSFFit gaussian, LCStateMachine state, VideoController videoController)
        {
            InitializeComponent();

            m_VideoController = videoController;

            m_AutocenteredApertureAvailable = true;

            Text = "Add Object";
            btnAdd.Text = "Add";
            btnDontAdd.Text = "Don't Add";
            btnDelete.Visible = false;
            m_IsEdit = false;

            nudFitMatrixSize.Value = 11;
            nudFitMatrixSize.Maximum = 15;

            m_ObjectId = objectId;
            m_State = state;
            m_AstroImage = m_State.VideoOperation.m_StackedAstroImage;

            ObjectToAdd = new TrackedObjectConfig();

            m_Center = new ImagePixel(center);

            Initialize();

            if (rbOccultedStar.Enabled)
                SelectedObjectType = TrackingType.OccultedStar;
            else
                SelectedObjectType = TrackingType.GuidingStar;

            // Apply filtering to the processing pixels according to the configured default filter value
            int matirxSize = (int)nudFitMatrixSize.Value;

            GetFitInMatrix(gaussian, ref matirxSize);

            nudFitMatrixSize.Maximum = matirxSize;

            if (SelectedObjectType != TrackingType.OccultedStar)
                SetHeightAndType();
        }
Пример #22
0
 public TrackedObjectLight(byte targetNo, TrackedObjectConfig originalObject)
     : base(targetNo, originalObject)
 {
     Center = new ImagePixel(originalObject.OriginalFieldCenterX, originalObject.OriginalFieldCenterY);
 }
Пример #23
0
        internal bool IsLocateFirstObject(TrackedObjectConfig objectConfig)
        {
            if (objectConfig.TrackingType == TrackingType.GuidingStar)
                // A pure guiding star
                return true;

            if (objectConfig.TrackingType == TrackingType.OccultedStar &&
                LightCurveReductionContext.Instance.LightCurveReductionType == LightCurveReductionType.MutualEvent &&
                !LightCurveReductionContext.Instance.FullDisappearance)
            {
                // Occulted star in Mutual events (which is not fully disappearing) will be bright enough for guiding
                return true;
            }

            if (objectConfig.TrackingType == TrackingType.OccultedStar &&
                objectConfig.AutoStarsInArea.Count == 1 &&
                !objectConfig.IsWeakSignalObject &&
                !LightCurveReductionContext.Instance.FullDisappearance)
            {
                // Occulted star, which is the only bright in the area and doesn't have a manually placed aperture
                // and is not a full or almost full disappearance
                return true;
            }

            return false;
        }
Пример #24
0
 public SpectroscopyStarTracker(TrackedObjectConfig starConfig)
 {
     TrackedStar = new TrackedObject(0, starConfig);
     TrackedStar.LastKnownGoodPosition = new ImagePixel(starConfig.ApertureStartingX, starConfig.ApertureStartingY);
 }
Пример #25
0
        public override void ObjectSelected(TrackedObjectConfig selectedObject, bool shift, bool ctrl, int selectedStarId)
        {
            if (ctrl)
            {
                // Delete
                int starIdx = -1;
                for (int i = 0; i < Context.MeasuringStars.Count; i++)
                {
                    TrackedObjectConfig obj = Context.MeasuringStars[i];

                    if (obj.AsImagePixel == selectedObject.AsImagePixel)
                    {
                        starIdx = i;
                        break;
                    }
                }

                if (starIdx > -1)
                {
                    Context.MeasuringStars.RemoveAt(starIdx);
                    Context.MeasuringApertures.RemoveAt(starIdx);
                    Context.PsfFitMatrixSizes.RemoveAt(starIdx);

                    if (Context.MeasuringStars.Count < 4)
                        Context.VideoOperation.MaxStarsReached(false);
                }
            }
            else if (shift)
            {
                Trace.Assert(false, "Overwriting is not implemented");
                //// Overwrite
                //if (MeasuringStars.Count > 0)
                //{
                //    MeasuringStars.RemoveAt(MeasuringStars.Count - 1);
                //    MeasuringApertures.RemoveAt(MeasuringStars.Count - 1);

                //    MeasuringStars.Add(star);
                //    MeasuringApertures.Add(ApertureSize(gaussian));
                //}
            }
            else
            {
                // Add/Update
                int idx = selectedStarId < 0 ? Context.MeasuringStars.IndexOf(selectedObject) : selectedStarId;
                if (idx > -1)
                {
                    if (idx >= 0 && idx < Context.MeasuringStars.Count)
                    {
                        Context.MeasuringStars[idx] = selectedObject;
                        Context.MeasuringApertures[idx] = selectedObject.ApertureInPixels;
                        Context.PsfFitMatrixSizes[idx] = selectedObject.PsfFitMatrixSize;

                        Context.VideoOperation.SelectedTargetChanged(idx);
                    }

                    return;
                }
                if (Context.MeasuringStars.FindAll(obj => obj.MeasureThisObject).Count >= 4) return;

                Context.MeasuringStars.Add(selectedObject);
                Context.MeasuringApertures.Add(selectedObject.ApertureInPixels);
                Context.PsfFitMatrixSizes.Add(selectedObject.PsfFitMatrixSize);

                if (Context.MeasuringStars.Count >= 4)
                    Context.VideoOperation.MaxStarsReached(true);
            }

            Context.m_SelectedMeasuringStar = Context.MeasuringStars.Count - 1;
            Context.VideoOperation.SelectedTargetChanged(Context.m_SelectedMeasuringStar);

            // Make all the aperture the same size as the current one
            for (int i = 0; i < Context.MeasuringStars.Count; i++)
            {
                TrackedObjectConfig obj = Context.MeasuringStars[i];
                obj.ApertureInPixels = selectedObject.ApertureInPixels;
                Context.m_MeasuringApertures[i] = selectedObject.ApertureInPixels;
            }
        }
Пример #26
0
 public void ObjectEdited(int selectedStarId, TrackedObjectConfig selectedObject)
 {
     m_CurrentStateObject.ObjectSelected(selectedObject, false, false, selectedStarId);
 }