Exemplo n.º 1
0
        public bool AddObservation(
            string designation, double raHours, double deDeg,
            DateTime utcTime, TimeSpan timePrecision, double mag,
            MagnitudeBand band, bool isVideoNormalPosition, double?raUncertaintyArcSec, double?deUncertaintyArcSec)
        {
            lastObjectDesignation = designation;

            MPCObsLine obsLine = new MPCObsLine(Header.COD);

            obsLine.SetObject(designation);
            obsLine.SetPosition(raHours, deDeg, utcTime, isVideoNormalPosition);
            obsLine.SetMagnitude(mag, band);
            obsLine.SetUncertainty(raUncertaintyArcSec, deUncertaintyArcSec);

            if (Header.COD == MPCObsLine.ROVING_OBS_CODE)
            {
                string newLine1 = obsLine.BuildRovingObserverLine1();
                if (ObsLines.Exists(l => newLine1.Equals(l.BuildObservationASCIILine(), StringComparison.Ordinal)))
                {
                    return(false);
                }
            }
            else
            {
                string newLine = obsLine.BuildObservationASCIILine();
                if (ObsLines.Exists(l => newLine.Equals(l.BuildObservationASCIILine(), StringComparison.Ordinal)))
                {
                    return(false);
                }
            }

            ObsLines.Add(obsLine);
            return(true);
        }
Exemplo n.º 2
0
        public MPCReportFile(string fileName)
        {
            ReportFileName = fileName;
            string[] allLines = File.ReadAllLines(fileName);

            Header = new MPCObsHeader(allLines);
            ObsLines.Clear();

            int strippedLines = 0;

            foreach (string line in allLines)
            {
                if (line.Length > 3 && (ObsLines.Count > 0 || HEADER_TOKENS.IndexOf(line.Substring(0, 3)) == -1))
                {
                    // Parse observation line
                    MPCObsLine obsLine = MPCObsLine.Parse(line);
                    if (obsLine != null)
                    {
                        ObsLines.Add(obsLine);
                    }
                    else
                    {
                        strippedLines++;
                    }
                }
            }

            if (strippedLines > 0)
            {
                MessageBox.Show(string.Format("{0} lines could not be parsed are have been stripped from the file.", strippedLines), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Exemplo n.º 3
0
        private void tbxObject_TextChanged(object sender, EventArgs e)
        {
            string designation = MPCObsLine.GetObjectCode(tbxObject.Text);

            if (designation != null)
            {
                tbxLine.Text    = designation;
                tbxLine.Enabled = false;
            }
            else
            {
                tbxLine.Text    = string.Empty;
                tbxLine.Enabled = false;
            }

            tbxObject.Focus();
        }
Exemplo n.º 4
0
        internal string GetReport(string obsCode, string designation, DateTime obsDate, double normalTime)
        {
            MPCObsLine obsLine = new MPCObsLine(obsCode.PadLeft(3).Substring(0, 3));

            obsLine.SetObject(designation.PadLeft(12).Substring(0, 12));

            if (m_RegressionRA != null && m_RegressionDE != null)
            {
                DateTime mpcTime = obsDate.Date.AddDays(normalTime);
                double   errRA, errDE;
                double   mpcRAHours = m_RegressionRA.ComputeYWithError(normalTime, out errRA, m_ErrorMethod) / 15.0;
                double   mpcDEDeg   = m_RegressionDE.ComputeYWithError(normalTime, out errDE, m_ErrorMethod);

                var errRACosDE = errRA * Math.Cos(mpcDEDeg * Math.PI / 180) * 3600;
                errDE *= 3600;

                if (m_PosUncertaintyMedArcSec.HasValue)
                {
                    errRACosDE = Math.Sqrt(errRACosDE * errRACosDE + m_PosUncertaintyMedArcSec.Value * m_PosUncertaintyMedArcSec.Value);
                    errDE      = Math.Sqrt(errDE * errDE + m_PosUncertaintyMedArcSec.Value * m_PosUncertaintyMedArcSec.Value);
                }

                if (errRACosDE < m_SmallestReportedUncertaintyArcSec)
                {
                    errRACosDE = m_SmallestReportedUncertaintyArcSec;
                }
                if (errDE < m_SmallestReportedUncertaintyArcSec)
                {
                    errDE = m_SmallestReportedUncertaintyArcSec;
                }

                var mag = m_Entries.Select(x => x.Mag).ToList().Median();

                obsLine.SetPosition(mpcRAHours, mpcDEDeg, mpcTime, true, TangraConfig.Settings.Astrometry.ExportHigherPositionAccuracy);
                obsLine.SetMagnitude(mag, MagnitudeBand.Cousins_R);

                if (TangraConfig.Settings.Astrometry.ExportUncertainties)
                {
                    obsLine.SetUncertainty(errRACosDE, errDE);
                }

                return(obsLine.BuildObservationASCIILine());
            }

            return(null);
        }
Exemplo n.º 5
0
 private void tbxLine_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.KeyCode == Keys.Enter)
     {
         string parsedCode;
         string designation = MPCObsLine.GetObjectCode(tbxLine.Text, out parsedCode);
         tbxLine.Text           = designation;
         tbxObject.TextChanged -= tbxObject_TextChanged;
         try
         {
             tbxObject.Text = parsedCode;
         }
         finally
         {
             tbxObject.TextChanged += tbxObject_TextChanged;
         }
     }
 }
Exemplo n.º 6
0
        public bool AddObservation(string reportLine)
        {
            try
            {
                if (reportLine.Length > 80)
                {
                    reportLine = reportLine.Substring(0, 80);
                }

                var obsLine = MPCObsLine.Parse(reportLine);
                if (obsLine != null)
                {
                    ObsLines.Add(obsLine);
                }

                return(true);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.GetFullStackTrace());
                return(false);
            }
        }
Exemplo n.º 7
0
        public AstrometricSolutionImpl(LeastSquareFittedAstrometry astrometry, StarMagnitudeFit photometry, AstrometricState state, FieldSolveContext fieldSolveContext, MeasurementContext measurementContext)
        {
            StarCatalog        = fieldSolveContext.StarCatalogueFacade.CatalogNETCode;
            UtcTime            = fieldSolveContext.UtcTime;
            FrameNoOfUtcTime   = fieldSolveContext.FrameNoOfUtcTime;
            AutoLimitMagnitude = (float)fieldSolveContext.AutoLimitMagnitude;

            ResolvedFocalLength = (float)fieldSolveContext.FocalLength;

            if (astrometry != null)
            {
                ResolvedCenterRADeg = (float)astrometry.RA0Deg;
                ResolvedCenterDEDeg = (float)astrometry.DE0Deg;
                StdDevRAArcSec      = (float)astrometry.StdDevRAArcSec;
                StdDevDEArcSec      = (float)astrometry.StdDevDEArcSec;
                ArcSecsInPixel      = 1 / astrometry.GetDistanceInPixels(1);
            }
            else
            {
                ResolvedCenterRADeg = float.NaN;
                ResolvedCenterDEDeg = float.NaN;
                StdDevRAArcSec      = float.NaN;
                StdDevDEArcSec      = float.NaN;
                ArcSecsInPixel      = 0;
            }

            if (state.SelectedObject != null)
            {
                m_UserObject       = new TangraUserObjectImpl();
                m_UserObject.RADeg = (float)state.SelectedObject.RADeg;
                m_UserObject.DEDeg = (float)state.SelectedObject.DEDeg;
                m_UserObject.X     = (float)state.SelectedObject.X0;
                m_UserObject.Y     = (float)state.SelectedObject.Y0;

                if (state.IdentifiedObjects != null &&
                    state.IdentifiedObjects.Count == 1)
                {
                    foreach (IIdentifiedObject idObj in state.IdentifiedObjects)
                    {
                        if (AngleUtility.Elongation(idObj.RAHours * 15.0, idObj.DEDeg, state.SelectedObject.RADeg, state.SelectedObject.DEDeg) * 3600 < 120)
                        {
                            m_UserObject.ResolvedName = idObj.ObjectName;
                            break;
                        }
                    }
                }
            }

            InstrumentalDelay         = measurementContext.InstrumentalDelay;
            InstrumentalDelayUnits    = measurementContext.InstrumentalDelayUnits.ToString();
            FrameTimeType             = measurementContext.FrameTimeType.ToString();
            IntegratedFramesCount     = measurementContext.IntegratedFramesCount;
            IntegratedExposureSeconds = measurementContext.IntegratedExposureSeconds;
            AavIntegration            = measurementContext.AavIntegration;
            AavStackedMode            = measurementContext.AavStackedMode;
            VideoFileFormat           = measurementContext.VideoFileFormat.ToString();
            NativeVideoFormat         = measurementContext.NativeVideoFormat;
            if (!string.IsNullOrEmpty(state.IdentifiedObjectToMeasure))
            {
                ObjectDesignation = MPCObsLine.GetObjectCode(state.IdentifiedObjectToMeasure);
            }
            else if (state.IdentifiedObjects != null && state.IdentifiedObjects.Count == 1)
            {
                ObjectDesignation = MPCObsLine.GetObjectCode(state.IdentifiedObjects[0].ObjectName);
            }

            ObservatoryCode = fieldSolveContext.ObsCode;
            CatalogueCode   = measurementContext.StarCatalogueFacade.CatalogNETCode;

            m_MeasurementsImpl = new List <TangraAstrometricMeasurementImpl>();

            if (state.Measurements != null)
            {
                foreach (var mea in state.Measurements)
                {
                    m_MeasurementsImpl.Add(new TangraAstrometricMeasurementImpl()
                    {
                        DEDeg   = mea.DEDeg,
                        RADeg   = mea.RADeg,
                        FrameNo = mea.FrameNo,
                        SolutionUncertaintyRACosDEArcSec = mea.SolutionUncertaintyRACosDEArcSec,
                        SolutionUncertaintyDEArcSec      = mea.SolutionUncertaintyDEArcSec,
                        FWHMArcSec           = mea.FWHMArcSec,
                        Detection            = mea.Detection,
                        SNR                  = mea.SNR,
                        UncorrectedTimeStamp = mea.FrameTimeStamp,
                        Mag                  = mea.Mag
                    });
                }
            }

            m_MatchedStarImpl = new List <TangraMatchedStarImpl>();

            if (astrometry != null)
            {
                foreach (PlateConstStarPair pair in astrometry.FitInfo.AllStarPairs)
                {
                    if (pair.FitInfo.UsedInSolution)
                    {
                        var star = new TangraMatchedStarImpl()
                        {
                            X      = (float)pair.x,
                            Y      = (float)pair.y,
                            RADeg  = (float)pair.RADeg,
                            DEDeg  = (float)pair.DEDeg,
                            StarNo = pair.StarNo,
                            ExcludedForHighResidual = pair.FitInfo.ExcludedForHighResidual,
                            ResidualRAArcSec        = (float)pair.FitInfo.ResidualRAArcSec,
                            ResidualDEArcSec        = (float)pair.FitInfo.ResidualDEArcSec,
                            DetectionCertainty      = (float)pair.DetectionCertainty,
                            PSFAmplitude            = (int)pair.Intensity,
                            IsSaturated             = pair.IsSaturated,
                            Mag = (float)pair.Mag
                        };

                        TangraCatalogStarImpl catStar = null;

                        IStar catalogStar = fieldSolveContext.CatalogueStars.Find(s => s.StarNo == pair.StarNo);
                        if (catalogStar != null)
                        {
                            if (catalogStar is UCAC4Entry)
                            {
                                catStar = new TangraAPASSStar();
                            }
                            else
                            {
                                catStar = new TangraCatalogStarImpl();
                            }

                            catStar.StarNo = catalogStar.StarNo;
                            catStar.MagR   = (float)catalogStar.MagR;
                            catStar.MagV   = (float)catalogStar.MagV;
                            catStar.MagB   = (float)catalogStar.MagB;
                            catStar.Mag    = (float)catalogStar.Mag;

                            if (catalogStar is UCAC3Entry)
                            {
                                UCAC3Entry ucac3Star = (UCAC3Entry)catalogStar;
                                catStar.MagJ       = (float)(ucac3Star.jmag * 0.001);
                                catStar.MagK       = (float)(ucac3Star.kmag * 0.001);
                                catStar.RAJ2000Deg = (float)ucac3Star.RACat;
                                catStar.DEJ2000Deg = (float)ucac3Star.DECat;
                            }
                            else if (catalogStar is UCAC2Entry)
                            {
                                UCAC2Entry ucac2Star = (UCAC2Entry)catalogStar;
                                catStar.MagJ       = (float)(ucac2Star._2m_J * 0.001);
                                catStar.MagK       = (float)(ucac2Star._2m_Ks * 0.001);
                                catStar.RAJ2000Deg = (float)ucac2Star.RACat;
                                catStar.DEJ2000Deg = (float)ucac2Star.DECat;
                            }
                            else if (catalogStar is NOMADEntry)
                            {
                                NOMADEntry nomadStar = (NOMADEntry)catalogStar;
                                catStar.MagJ       = (float)(nomadStar.m_J * 0.001);
                                catStar.MagK       = (float)(nomadStar.m_K * 0.001);
                                catStar.RAJ2000Deg = (float)nomadStar.RACat;
                                catStar.DEJ2000Deg = (float)nomadStar.DECat;
                            }
                            else if (catalogStar is UCAC4Entry)
                            {
                                UCAC4Entry ucac4Star = (UCAC4Entry)catalogStar;
                                catStar.MagJ       = (float)(ucac4Star.MagJ);
                                catStar.MagK       = (float)(ucac4Star.MagK);
                                catStar.RAJ2000Deg = (float)ucac4Star.RACat;
                                catStar.DEJ2000Deg = (float)ucac4Star.DECat;

                                ((TangraAPASSStar)catStar).B   = (float)ucac4Star.MagB;
                                ((TangraAPASSStar)catStar).V   = (float)ucac4Star.MagV;
                                ((TangraAPASSStar)catStar).g   = (float)ucac4Star.Mag_g;
                                ((TangraAPASSStar)catStar).r   = (float)ucac4Star.Mag_r;
                                ((TangraAPASSStar)catStar).i   = (float)ucac4Star.Mag_i;
                                ((TangraAPASSStar)catStar).e_B = ucac4Star.apase_B * 0.001f;
                                ((TangraAPASSStar)catStar).e_V = ucac4Star.apase_V * 0.001f;
                                ((TangraAPASSStar)catStar).e_g = ucac4Star.apase_g * 0.001f;
                                ((TangraAPASSStar)catStar).e_r = ucac4Star.apase_r * 0.001f;
                                ((TangraAPASSStar)catStar).e_i = ucac4Star.apase_i * 0.001f;
                            }
                        }

                        star.CatalogStar = catStar;

                        if (photometry != null)
                        {
                            IStar photometryStar = photometry.StarNumbers.FirstOrDefault(s => s.StarNo == pair.StarNo);
                            if (photometryStar != null)
                            {
                                int idx = photometry.StarNumbers.IndexOf(photometryStar);
                                star.Intensity               = (float)photometry.Intencities[idx];
                                star.IsSaturated             = photometry.SaturatedFlags[idx];
                                star.MeaSignalMethod         = ConvertSignalMethod(photometry.MeaSignalMethod);
                                star.MeaBackgroundMethod     = ConvertBackgroundMethod(photometry.MeaBackgroundMethod);
                                star.MeaSingleApertureSize   = photometry.MeaSingleAperture;
                                star.MeaBackgroundPixelCount = photometry.MeaBackgroundPixelCount;
                                star.MeaSaturationLevel      = photometry.MeaSaturationLevel;
                            }
                        }

                        m_MatchedStarImpl.Add(star);
                    }
                }
            }
        }