Example #1
0
 public void ConfigureEphemeris(EphemerisConfig <Moon> e)
 {
     e["Constellation"]       = (c, m) => Constellations.FindConstellation(c.Get(Equatorial), c.JulianDay);
     e["RTS.Rise"]            = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Rise);
     e["RTS.RiseAzimuth"]     = (c, m) => c.Get(RiseTransitSet).RiseAzimuth;
     e["RTS.Transit"]         = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Transit);
     e["RTS.TransitAltitude"] = (c, m) => c.Get(RiseTransitSet).TransitAltitude;
     e["RTS.Set"]             = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Set);
     e["RTS.SetAzimuth"]      = (c, m) => c.Get(RiseTransitSet).SetAzimuth;
     e["RTS.Duration"]        = (c, m) => c.Get(RiseTransitSet).Duration;
     e["Equatorial.Alpha"]    = (c, m) => c.Get(Equatorial).Alpha;
     e["Equatorial.Delta"]    = (c, m) => c.Get(Equatorial).Delta;
     e["Equatorial0.Alpha"]   = (c, m) => c.Get(Equatorial0).Alpha;
     e["Equatorial0.Delta"]   = (c, m) => c.Get(Equatorial0).Delta;
     e["Horizontal.Altitude"] = (c, m) => c.Get(Horizontal).Altitude;
     e["Horizontal.Azimuth"]  = (c, m) => c.Get(Horizontal).Azimuth;
     e["Ecliptical.Lambda"]   = (c, m) => c.Get(Ecliptical0).Lambda;
     e["Ecliptical.Beta"]     = (c, m) => c.Get(Ecliptical0).Beta;
     e["Phase"]      = (c, m) => c.Get(Phase);
     e["PhaseAngle"] = (c, m) => c.Get(PhaseAngle);
     e["Age", new Formatters.UnsignedDoubleFormatter(2, " d")] = (c, m) => c.Get(Age);
     e["Lunation"]  = (c, m) => c.Get(Lunation);
     e["Magnitude"] = (c, m) => c.Get(Magnitude);
     e["Distance", new LunarDistanceFormatter()] = (c, m) => c.Get(Ecliptical0).Distance;
     e["HorizontalParallax"] = (c, m) => c.Get(Parallax);
     e["AngularDiameter"]    = (c, m) => c.Get(Semidiameter) * 2 / 3600.0;
     e["Libration.Latitude", new LibrationLatitudeFormatter()]   = (c, m) => c.Get(LibrationElements).b;
     e["Libration.Longitude", new LibrationLongitudeFormatter()] = (c, m) => c.Get(LibrationElements).l;
 }
Example #2
0
 public void ConfigureEphemeris(EphemerisConfig <Comet> e)
 {
     e["Constellation"]       = (c, p) => Constellations.FindConstellation(c.Get(EquatorialT, p), c.JulianDay);
     e["Magnitude"]           = (c, p) => c.Get(Magnitude, p);
     e["AngularDiameter"]     = (c, p) => c.Get(Appearance, p).Coma / 3600f;
     e["DistanceFromEarth"]   = (c, p) => c.Get(DistanceFromEarth, p);
     e["DistanceFromSun"]     = (c, p) => c.Get(DistanceFromSun, p);
     e["HorizontalParallax"]  = (c, p) => c.Get(Parallax, p);
     e["Horizontal.Altitude"] = (c, p) => c.Get(Horizontal, p).Altitude;
     e["Horizontal.Azimuth"]  = (c, p) => c.Get(Horizontal, p).Azimuth;
     e["Equatorial.Alpha"]    = (c, p) => c.Get(EquatorialT, p).Alpha;
     e["Equatorial.Delta"]    = (c, p) => c.Get(EquatorialT, p).Delta;
     e["Equatorial0.Alpha"]   = (c, p) => c.Get(EquatorialJ2000, p).Alpha;
     e["Equatorial0.Delta"]   = (c, p) => c.Get(EquatorialJ2000, p).Delta;
     e["Equatorial0T.Alpha", Formatters.RA]  = (c, p) => c.Get(EquatorialJ2000T, p).Alpha;
     e["Equatorial0T.Delta", Formatters.Dec] = (c, p) => c.Get(EquatorialJ2000T, p).Delta;
     e["EquatorialG.Alpha", Formatters.RA]   = (c, p) => c.Get(EquatorialG, p).Alpha;
     e["EquatorialG.Delta", Formatters.Dec]  = (c, p) => c.Get(EquatorialG, p).Delta;
     e["Ecliptical.Lambda"] = (c, p) => c.Get(Ecliptical, p).Lambda;
     e["Ecliptical.Beta"]   = (c, p) => c.Get(Ecliptical, p).Beta;
     e["RTS.Rise"]          = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p).Rise);
     e["RTS.Transit"]       = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p).Transit);
     e["RTS.Set"]           = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p).Set);
     e["RTS.Duration"]      = (c, p) => c.Get(RiseTransitSet, p).Duration;
 }
Example #3
0
 public void ConfigureEphemeris(EphemerisConfig <Pluto> e)
 {
     e["Constellation"]       = (c, nm) => Constellations.FindConstellation(c.Get(Pluto_Equatorial), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, nm) => c.Get(Pluto_Equatorial).Alpha;
     e["Equatorial.Delta"]    = (c, nm) => c.Get(Pluto_Equatorial).Delta;
     e["Equatorial0.Alpha"]   = (c, nm) => c.Get(Pluto_Equatorial0).Alpha;
     e["Equatorial0.Delta"]   = (c, nm) => c.Get(Pluto_Equatorial0).Delta;
     e["Ecliptical.Lambda"]   = (c, p) => c.Get(Pluto_Ecliptical).Lambda;
     e["Ecliptical.Beta"]     = (c, p) => c.Get(Pluto_Ecliptical).Beta;
     e["Horizontal.Altitude"] = (c, nm) => c.Get(Pluto_Horizontal).Altitude;
     e["Horizontal.Azimuth"]  = (c, nm) => c.Get(Pluto_Horizontal).Azimuth;
     e["Magnitude"]           = (c, nm) => c.Get(Pluto_Magnitude);
     e["DistanceFromEarth"]   = (c, p) => c.Get(Pluto_DistanceFromEarth);
     e["DistanceFromSun"]     = (c, p) => c.Get(Pluto_DistanceFromSun);
     e["HorizontalParallax"]  = (c, p) => c.Get(Pluto_Parallax);
     e["AngularDiameter"]     = (c, p) => c.Get(Pluto_Semidiameter) * 2 / 3600.0;
     e["Appearance.CM"]       = (c, p) => c.Get(Pluto_Appearance).CM;
     e["Appearance.D"]        = (c, p) => c.Get(Pluto_Appearance).D;
     e["Appearance.P"]        = (c, p) => c.Get(Pluto_Appearance).P;
     e["RTS.Rise"]            = (c, p) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Rise);
     e["RTS.Transit"]         = (c, p) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Transit);
     e["RTS.Set"]             = (c, p) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Set);
     e["RTS.Duration"]        = (c, p) => c.Get(Pluto_RiseTransitSet).Duration;
     e["Visibility.Begin"]    = (c, p) => c.GetDateFromTime(c.Get(Pluto_Visibility).Begin);
     e["Visibility.End"]      = (c, p) => c.GetDateFromTime(c.Get(Pluto_Visibility).End);
     e["Visibility.Duration"] = (c, p) => c.Get(Pluto_Visibility).Duration;
     e["Visibility.Period"]   = (c, p) => c.Get(Pluto_Visibility).Period;
 }
Example #4
0
        public void GetInfo(CelestialObjectInfo <Tycho2Star> info)
        {
            Tycho2Star s             = info.Body;
            SkyContext c             = info.Context;
            string     constellation = Constellations.FindConstellation(s.Equatorial, c.JulianDay);

            info
            .SetTitle(s.ToString())
            .SetSubtitle(Text.Get("Tycho2Star.Subtitle"))

            .AddRow("Constellation", constellation)

            .AddHeader(Text.Get("Tycho2Star.Equatorial"))
            .AddRow("Equatorial.Alpha", c.Get(Equatorial, s).Alpha)
            .AddRow("Equatorial.Delta", c.Get(Equatorial, s).Delta)

            .AddHeader(Text.Get("Tycho2Star.Equatorial0"))
            .AddRow("Equatorial0.Alpha", s.Equatorial0.Alpha)
            .AddRow("Equatorial0.Delta", s.Equatorial0.Delta)

            .AddHeader(Text.Get("Tycho2Star.Horizontal"))
            .AddRow("Horizontal.Azimuth")
            .AddRow("Horizontal.Altitude")

            .AddHeader(Text.Get("Tycho2Star.RTS"))
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader(Text.Get("Tycho2Star.Properties"))
            .AddRow("Magnitude", s.Magnitude);
        }
Example #5
0
        public void GetInfo(CelestialObjectInfo <Tycho2Star> info)
        {
            Tycho2Star s             = info.Body;
            SkyContext c             = info.Context;
            string     constellation = Constellations.FindConstellation(s.Equatorial, c.JulianDay);

            info
            .SetTitle(s.ToString())
            .SetSubtitle("Star")

            .AddRow("Constellation", constellation)

            .AddHeader("Equatorial coordinates (current epoch)")
            .AddRow("Equatorial.Alpha", c.Get(Equatorial, s).Alpha)
            .AddRow("Equatorial.Delta", c.Get(Equatorial, s).Delta)

            .AddHeader("Equatorial coordinates (J2000.0 epoch)")
            .AddRow("Equatorial0.Alpha", s.Equatorial0.Alpha)
            .AddRow("Equatorial0.Delta", s.Equatorial0.Delta)

            .AddHeader("Horizontal coordinates")
            .AddRow("Horizontal.Azimuth")
            .AddRow("Horizontal.Altitude")

            .AddHeader("Visibility")
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader("Properties")
            .AddRow("Magnitude", s.Magnitude);
        }
Example #6
0
 public void ConfigureEphemeris(EphemerisConfig <Sun> e)
 {
     e["Constellation"]       = (c, s) => Constellations.FindConstellation(c.Get(Equatorial), c.JulianDay);
     e["Equatorial0.Alpha"]   = (c, s) => c.Get(Equatorial0).Alpha;
     e["Equatorial0.Delta"]   = (c, s) => c.Get(Equatorial0).Delta;
     e["Equatorial.Alpha"]    = (c, s) => c.Get(Equatorial).Alpha;
     e["Equatorial.Delta"]    = (c, s) => c.Get(Equatorial).Delta;
     e["Ecliptical.Lambda"]   = (c, s) => c.Get(Ecliptical).Lambda;
     e["Ecliptical.Beta"]     = (c, s) => c.Get(Ecliptical).Beta;
     e["Horizontal.Altitude"] = (c, s) => c.Get(Horizontal).Altitude;
     e["Horizontal.Azimuth"]  = (c, s) => c.Get(Horizontal).Azimuth;
     e["RTS.Rise"]            = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet).Rise);
     e["RTS.Transit"]         = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet).Transit);
     e["RTS.Set"]             = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet).Set);
     e["RTS.Duration"]        = (c, s) => c.Get(RiseTransitSet).Duration;
     e["Twilight.Astronomical.Dawn", Formatters.Time] = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_ASTRONOMICAL).Rise);
     e["Twilight.Astronomical.Dust", Formatters.Time] = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_ASTRONOMICAL).Set);
     e["Twilight.Nautical.Dawn", Formatters.Time]     = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_NAUTICAL).Rise);
     e["Twilight.Nautical.Dust", Formatters.Time]     = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_NAUTICAL).Set);
     e["Twilight.Civil.Dawn", Formatters.Time]        = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_CIVIL).Rise);
     e["Twilight.Civil.Dust", Formatters.Time]        = (c, s) => c.GetDateFromTime(c.Get(Twilight, TWILIGHT_CIVIL).Set);
     e["Distance"]           = (c, s) => c.Get(Ecliptical).Distance;
     e["HorizontalParallax"] = (c, x) => c.Get(Parallax);
     e["AngularDiameter"]    = (c, x) => c.Get(Semidiameter) * 2 / 3600.0;
     e["CRN"] = (c, s) => c.Get(CarringtonNumber);
 }
Example #7
0
 public void ConfigureEphemeris(EphemerisConfig <Planet> e)
 {
     e["Constellation"]       = (c, p) => Constellations.FindConstellation(c.Get(Equatorial, p.Number), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, p) => c.Get(Equatorial, p.Number).Alpha;
     e["Equatorial.Delta"]    = (c, p) => c.Get(Equatorial, p.Number).Delta;
     e["Equatorial0.Alpha"]   = (c, p) => c.Get(Equatorial0, p.Number).Alpha;
     e["Equatorial0.Delta"]   = (c, p) => c.Get(Equatorial0, p.Number).Delta;
     e["Ecliptical.Lambda"]   = (c, p) => c.Get(Ecliptical, p.Number).Lambda;
     e["Ecliptical.Beta"]     = (c, p) => c.Get(Ecliptical, p.Number).Beta;
     e["Horizontal.Altitude"] = (c, p) => c.Get(Horizontal, p.Number).Altitude;
     e["Horizontal.Azimuth"]  = (c, p) => c.Get(Horizontal, p.Number).Azimuth;
     e["Magnitude"]           = (c, p) => c.Get(Magnitude, p.Number);
     e["Phase"]                   = (c, p) => c.Get(Phase, p.Number);
     e["PhaseAngle"]              = (c, p) => c.Get(PhaseAngle, p.Number);
     e["DistanceFromEarth"]       = (c, p) => c.Get(DistanceFromEarth, p.Number);
     e["DistanceFromSun"]         = (c, p) => c.Get(DistanceFromSun, p.Number);
     e["HorizontalParallax"]      = (c, p) => c.Get(Parallax, p.Number);
     e["AngularDiameter"]         = (c, p) => c.Get(Semidiameter, p.Number) * 2 / 3600.0;
     e["Appearance.CM"]           = (c, p) => c.Get(Appearance, p.Number).CM;
     e["Appearance.D"]            = (c, p) => c.Get(Appearance, p.Number).D;
     e["Appearance.P"]            = (c, p) => c.Get(Appearance, p.Number).P;
     e["SaturnRings.a", IsSaturn] = (c, p) => c.Get(GetSaturnRings, p.Number).a;
     e["SaturnRings.b", IsSaturn] = (c, p) => c.Get(GetSaturnRings, p.Number).b;
     e["GRSLongitude", IsJupiter] = (c, p) => c.Get(JupiterGreatRedSpotLongitude);
     e["RTS.Rise"]                = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p.Number).Rise);
     e["RTS.Transit"]             = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p.Number).Transit);
     e["RTS.Set"]                 = (c, p) => c.GetDateFromTime(c.Get(RiseTransitSet, p.Number).Set);
     e["RTS.Duration"]            = (c, p) => c.Get(RiseTransitSet, p.Number).Duration;
     e["Visibility.Begin"]        = (c, p) => c.GetDateFromTime(c.Get(Visibility, p.Number).Begin);
     e["Visibility.End"]          = (c, p) => c.GetDateFromTime(c.Get(Visibility, p.Number).End);
     e["Visibility.Duration"]     = (c, p) => c.Get(Visibility, p.Number).Duration;
     e["Visibility.Period"]       = (c, p) => c.Get(Visibility, p.Number).Period;
 }
Example #8
0
 public void ConfigureEphemeris(EphemerisConfig <Asteroid> e)
 {
     e["Constellation"]       = (c, a) => Constellations.FindConstellation(c.Get(EquatorialT, a), c.JulianDay);
     e["Horizontal.Altitude"] = (c, a) => c.Get(Horizontal, a).Altitude;
     e["Horizontal.Azimuth"]  = (c, a) => c.Get(Horizontal, a).Azimuth;
     e["Equatorial.Alpha"]    = (c, a) => c.Get(EquatorialT, a).Alpha;
     e["Equatorial.Delta"]    = (c, a) => c.Get(EquatorialT, a).Delta;
     e["Equatorial0.Alpha"]   = (c, a) => c.Get(EquatorialG, a).Alpha;
     e["Equatorial0.Delta"]   = (c, a) => c.Get(EquatorialG, a).Delta;
     e["Ecliptical.Lambda"]   = (c, a) => c.Get(Ecliptical, a).Lambda;
     e["Ecliptical.Beta"]     = (c, a) => c.Get(Ecliptical, a).Beta;
     e["RTS.Rise"]            = (c, a) => c.GetDateFromTime(c.Get(RiseTransitSet, a).Rise);
     e["RTS.Transit"]         = (c, a) => c.GetDateFromTime(c.Get(RiseTransitSet, a).Transit);
     e["RTS.Set"]             = (c, a) => c.GetDateFromTime(c.Get(RiseTransitSet, a).Set);
     e["RTS.Duration"]        = (c, a) => c.Get(RiseTransitSet, a).Duration;
     e["RTS.RiseAzimuth"]     = (c, a) => c.Get(RiseTransitSet, a).RiseAzimuth;
     e["RTS.TransitAltitude"] = (c, a) => c.Get(RiseTransitSet, a).TransitAltitude;
     e["RTS.SetAzimuth"]      = (c, a) => c.Get(RiseTransitSet, a).SetAzimuth;
     e["Visibility.Begin"]    = (c, a) => c.GetDateFromTime(c.Get(Visibility, a).Begin);
     e["Visibility.End"]      = (c, a) => c.GetDateFromTime(c.Get(Visibility, a).End);
     e["Visibility.Duration"] = (c, a) => c.Get(Visibility, a).Duration;
     e["Visibility.Period"]   = (c, a) => c.Get(Visibility, a).Period;
     e["DistanceFromEarth"]   = (c, a) => c.Get(DistanceFromEarth, a);
     e["DistanceFromSun"]     = (c, a) => c.Get(DistanceFromSun, a);
     e["Phase"]              = (c, a) => c.Get(Phase, a);
     e["PhaseAngle"]         = (c, a) => c.Get(PhaseAngle, a);
     e["Magnitude"]          = (c, a) => c.Get(Magnitude, a);
     e["HorizontalParallax"] = (c, a) => c.Get(Parallax, a);
     e["AngularDiameter", a => a.PhysicalDiameter > 0] = (c, a) => c.Get(Semidiameter, a) * 2 / 3600.0;
 }
Example #9
0
 public void ConfigureEphemeris(EphemerisConfig <Nova> e)
 {
     e["Constellation"]       = (c, m) => Constellations.FindConstellation(c.Get(Equatorial, m), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, m) => c.Get(Equatorial, m).Alpha;
     e["Equatorial.Delta"]    = (c, m) => c.Get(Equatorial, m).Delta;
     e["Horizontal.Altitude"] = (c, m) => c.Get(Horizontal, m).Altitude;
     e["Horizontal.Azimuth"]  = (c, m) => c.Get(Horizontal, m).Azimuth;
     e["Magnitude"]           = (c, m) => c.Get(Magnitude, m);
     e["RTS.Rise"]            = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet, m).Rise);
     e["RTS.Transit"]         = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet, m).Transit);
     e["RTS.Set"]             = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet, m).Set);
     e["RTS.Duration"]        = (c, m) => c.Get(RiseTransitSet, m).Duration;
 }
Example #10
0
        public void GetInfo(CelestialObjectInfo <Star> info)
        {
            Star        s       = info.Body;
            SkyContext  c       = info.Context;
            StarDetails details = c.Get(ReadStarDetails, s.Number);

            info
            .SetTitle(string.Join(", ", s.Names))
            .SetSubtitle(Text.Get("Star.Type"))

            .AddRow("Constellation", Constellations.FindConstellation(c.Get(Equatorial, s.Number), c.JulianDay))

            .AddHeader(Text.Get("Star.Equatorial"))
            .AddRow("Equatorial.Alpha", c.Get(Equatorial, s.Number).Alpha)
            .AddRow("Equatorial.Delta", c.Get(Equatorial, s.Number).Delta)

            .AddHeader(Text.Get("Star.Equatorial0"))
            .AddRow("Equatorial0.Alpha", s.Equatorial0.Alpha)
            .AddRow("Equatorial0.Delta", s.Equatorial0.Delta)

            .AddHeader(Text.Get("Star.Horizontal"))
            .AddRow("Horizontal.Azimuth")
            .AddRow("Horizontal.Altitude")

            .AddHeader(Text.Get("Star.RTS"))
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader(Text.Get("Star.Visibility"))
            .AddRow("Visibility.Begin")
            .AddRow("Visibility.End")
            .AddRow("Visibility.Duration")
            .AddRow("Visibility.Period")

            .AddHeader(Text.Get("Star.Properties"))
            .AddRow("Magnitude", s.Mag)
            .AddRow("IsInfraredSource", details.IsInfraredSource)
            .AddRow("SpectralClass", details.SpectralClass);

            if (!string.IsNullOrEmpty(details.Pecularity))
            {
                info.AddRow("Pecularity", details.Pecularity);
            }

            if (details.RadialVelocity != null)
            {
                info.AddRow("RadialVelocity", details.RadialVelocity + " km/s");
            }
        }
 public void ConfigureEphemeris(EphemerisConfig <GenericMoon> e)
 {
     e["Constellation"]       = (c, nm) => Constellations.FindConstellation(c.Get(GenericMoon_Equatorial, nm.Id), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, nm) => c.Get(GenericMoon_Equatorial, nm.Id).Alpha;
     e["Equatorial.Delta"]    = (c, nm) => c.Get(GenericMoon_Equatorial, nm.Id).Delta;
     e["Horizontal.Altitude"] = (c, nm) => c.Get(GenericMoon_Horizontal, nm.Id).Altitude;
     e["Horizontal.Azimuth"]  = (c, nm) => c.Get(GenericMoon_Horizontal, nm.Id).Azimuth;
     e["AngularDiameter"]     = (c, nm) => c.Get(GenericMoon_Semidiameter, nm.Id) * 2 / 3600.0;
     e["Magnitude"]           = (c, nm) => c.Get(GenericMoon_Magnitude, nm.Id);
     e["RTS.Rise"]            = (c, nm) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Rise);
     e["RTS.Transit"]         = (c, nm) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Transit);
     e["RTS.Set"]             = (c, nm) => c.GetDateFromTime(c.Get(Pluto_RiseTransitSet).Set);
     e["RTS.Duration"]        = (c, nm) => c.Get(Pluto_RiseTransitSet).Duration;
 }
Example #12
0
 public void ConfigureEphemeris(EphemerisConfig <NeptuneMoon> e)
 {
     e["Constellation"]       = (c, nm) => Constellations.FindConstellation(c.Get(NeptuneMoon_Equatorial, nm.Number), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, nm) => c.Get(NeptuneMoon_Equatorial, nm.Number).Alpha;
     e["Equatorial.Delta"]    = (c, nm) => c.Get(NeptuneMoon_Equatorial, nm.Number).Delta;
     e["Horizontal.Altitude"] = (c, nm) => c.Get(NeptuneMoon_Horizontal, nm.Number).Altitude;
     e["Horizontal.Azimuth"]  = (c, nm) => c.Get(NeptuneMoon_Horizontal, nm.Number).Azimuth;
     e["Rectangular.X"]       = (c, nm) => c.Get(NeptuneMoon_Rectangular, nm.Number).X;
     e["Rectangular.Y"]       = (c, nm) => c.Get(NeptuneMoon_Rectangular, nm.Number).Y;
     e["Rectangular.Z"]       = (c, nm) => c.Get(NeptuneMoon_Rectangular, nm.Number).Z;
     e["RTS.Rise"]            = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.NEPTUNE).Rise);
     e["RTS.Transit"]         = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.NEPTUNE).Transit);
     e["RTS.Set"]             = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.NEPTUNE).Set);
     e["RTS.Duration"]        = (c, p) => c.Get(Planet_RiseTransitSet, Planet.NEPTUNE).Duration;
     e["AngularDiameter"]     = (c, nm) => c.Get(NeptuneMoon_Semidiameter, nm.Number) * 2 / 3600.0;
     e["Magnitude"]           = (c, nm) => c.Get(NeptuneMoon_Magnitude, nm.Number);
 }
        public void FindConstellation()
        {
            // precessional elements for converting from J1950 to B1875 epoch
            var p = Precession.ElementsFK5(Date.EPOCH_J1950, Date.EPOCH_B1875);

            foreach (var test in testData)
            {
                // Equatorial coordinates for B1875 epoch
                CrdsEquatorial eq = Precession.GetEquatorialCoordinates(new CrdsEquatorial(test.RA, test.Dec), p);

                // Constellation name
                string con = Constellations.FindConstellation(eq);

                // Check result
                Assert.AreEqual(test.ConstName, con);
            }
        }
Example #14
0
        public void GetInfo(CelestialObjectInfo <Meteor> info)
        {
            Meteor     m = info.Body;
            SkyContext c = info.Context;

            string     constellation = Constellations.FindConstellation(c.Get(Equatorial, m), c.JulianDay);
            int        year          = c.GetDate(c.JulianDay).Year;
            var        offset        = c.GeoLocation.UtcOffset;
            var        jd0           = Date.DeltaT(c.JulianDay) / 86400.0 + Date.JulianDay0(year) - offset / 24;
            var        begin         = new Date(jd0 + m.Begin, offset);
            var        max           = new Date(jd0 + m.Max, offset);
            var        end           = new Date(jd0 + m.End, offset);
            SkyContext cMax          = new SkyContext(jd0 + m.Max, c.GeoLocation, c.PreferFastCalculation);
            var        phase         = LunarPhaseAtMax(cMax, m);

            info
            .SetTitle(string.Join(", ", info.Body.Names))
            .SetSubtitle(Text.Get("Meteor.Type"))
            .AddRow("Constellation", constellation)

            .AddHeader(Text.Get("Meteor.Equatorial"))
            .AddRow("Equatorial.Alpha")
            .AddRow("Equatorial.Delta")

            .AddHeader(Text.Get("Meteor.Horizontal"))
            .AddRow("Horizontal.Azimuth")
            .AddRow("Horizontal.Altitude")

            .AddHeader(Text.Get("Meteor.RTS"))
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader(Text.Get("Meteor.Activity"))
            .AddRow("Activity.Begin", begin, Formatters.Date)
            .AddRow("Activity.Max", max, Formatters.Date)
            .AddRow("Activity.End", end, Formatters.Date)
            .AddRow("Activity.LunarPhaseAtMax", phase, Formatters.Phase)

            .AddHeader(Text.Get("Meteor.Data"))
            .AddRow("Data.ZHR", m.ZHR)
            .AddRow("Data.ActivityClass", m.ActivityClass)
            .AddRow("Data.DriftRA", m.Drift.Alpha, Formatters.Angle)
            .AddRow("Data.DriftDec", m.Drift.Delta, Formatters.Angle);
        }
Example #15
0
 public void ConfigureEphemeris(EphemerisConfig <Planet> e)
 {
     e["Constellation"]       = (c, p) => Constellations.FindConstellation(c.Get(Planet_Equatorial, p.Number), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, p) => c.Get(Planet_Equatorial, p.Number).Alpha;
     e["Equatorial.Delta"]    = (c, p) => c.Get(Planet_Equatorial, p.Number).Delta;
     e["Equatorial0.Alpha"]   = (c, p) => c.Get(Planet_Equatorial0, p.Number).Alpha;
     e["Equatorial0.Delta"]   = (c, p) => c.Get(Planet_Equatorial0, p.Number).Delta;
     e["Ecliptical.Lambda"]   = (c, p) => c.Get(Planet_Ecliptical, p.Number).Lambda;
     e["Ecliptical.Beta"]     = (c, p) => c.Get(Planet_Ecliptical, p.Number).Beta;
     e["Horizontal.Altitude"] = (c, p) => c.Get(Planet_Horizontal, p.Number).Altitude;
     e["Horizontal.Azimuth"]  = (c, p) => c.Get(Planet_Horizontal, p.Number).Azimuth;
     e["Magnitude"]           = (c, p) => c.Get(Planet_Magnitude, p.Number);
     e["Phase"]                         = (c, p) => c.Get(Planet_Phase, p.Number);
     e["PhaseAngle"]                    = (c, p) => c.Get(Planet_PhaseAngle, p.Number);
     e["DistanceFromEarth"]             = (c, p) => c.Get(Planet_DistanceFromEarth, p.Number);
     e["DistanceFromSun"]               = (c, p) => c.Get(Planet_DistanceFromSun, p.Number);
     e["HorizontalParallax"]            = (c, p) => c.Get(Planet_Parallax, p.Number);
     e["AngularDiameter"]               = (c, p) => c.Get(Planet_Semidiameter, p.Number) * 2 / 3600.0;
     e["Appearance.CM"]                 = (c, p) => c.Get(Planet_Appearance, p.Number).CM;
     e["Appearance.D"]                  = (c, p) => c.Get(Planet_Appearance, p.Number).D;
     e["Appearance.P"]                  = (c, p) => c.Get(Planet_Appearance, p.Number).P;
     e["MartianCalendar.Year", IsMars]  = (c, p) => c.Get(Mars_Calendar).Year;
     e["MartianCalendar.Month", IsMars] = (c, p) => c.Get(Mars_Calendar).Month;
     e["MartianCalendar.Sol", IsMars]   = (c, p) => Math.Ceiling(c.Get(Mars_Calendar).Sol);
     e["MartianCalendar.Ls", IsMars, new Formatters.UnsignedDoubleFormatter(2, "\u00B0")]     = (c, p) => c.Get(Mars_Calendar).Ls;
     e["MartianPolarCaps.North", IsMars, new Formatters.UnsignedDoubleFormatter(1, "\u00B0")] = (c, p) => c.Get(Mars_PolarCap, PolarCap.Northern);
     e["MartianPolarCaps.South", IsMars, new Formatters.UnsignedDoubleFormatter(1, "\u00B0")] = (c, p) => c.Get(Mars_PolarCap, PolarCap.Southern);
     e["GRSLongitude", IsJupiter, new Formatters.UnsignedDoubleFormatter(2, "\u00B0")]        = (c, p) => c.Get(Jupiter_GreatRedSpotLongitude);
     e["SaturnRings.a", IsSaturn, new SaturnRingsFormatter()] = (c, p) => c.Get(Saturn_RingsAppearance, p.Number).a;
     e["SaturnRings.b", IsSaturn, new SaturnRingsFormatter()] = (c, p) => c.Get(Saturn_RingsAppearance, p.Number).b;
     e["RTS.Rise"]            = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, p.Number).Rise);
     e["RTS.Transit"]         = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, p.Number).Transit);
     e["RTS.Set"]             = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, p.Number).Set);
     e["RTS.Duration"]        = (c, p) => c.Get(Planet_RiseTransitSet, p.Number).Duration;
     e["RTS.RiseAzimuth"]     = (c, p) => c.Get(Planet_RiseTransitSet, p.Number).RiseAzimuth;
     e["RTS.TransitAltitude"] = (c, p) => c.Get(Planet_RiseTransitSet, p.Number).TransitAltitude;
     e["RTS.SetAzimuth"]      = (c, p) => c.Get(Planet_RiseTransitSet, p.Number).SetAzimuth;
     e["Visibility.Begin"]    = (c, p) => c.GetDateFromTime(c.Get(Planet_Visibility, p.Number).Begin);
     e["Visibility.End"]      = (c, p) => c.GetDateFromTime(c.Get(Planet_Visibility, p.Number).End);
     e["Visibility.Duration"] = (c, p) => c.Get(Planet_Visibility, p.Number).Duration;
     e["Visibility.Period"]   = (c, p) => c.Get(Planet_Visibility, p.Number).Period;
 }
Example #16
0
 public void ConfigureEphemeris(EphemerisConfig <Star> e)
 {
     e["Constellation"]       = (c, s) => Constellations.FindConstellation(c.Get(Equatorial, s.Number), c.JulianDay);
     e["Equatorial.Alpha"]    = (c, s) => c.Get(Equatorial, s.Number).Alpha;
     e["Equatorial.Delta"]    = (c, s) => c.Get(Equatorial, s.Number).Delta;
     e["Horizontal.Azimuth"]  = (c, s) => c.Get(Horizontal, s.Number).Azimuth;
     e["Horizontal.Altitude"] = (c, s) => c.Get(Horizontal, s.Number).Altitude;
     e["Magnitude"]           = (c, s) => s.Mag;
     e["RTS.Rise"]            = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet, s.Number).Rise);
     e["RTS.Transit"]         = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet, s.Number).Transit);
     e["RTS.Set"]             = (c, s) => c.GetDateFromTime(c.Get(RiseTransitSet, s.Number).Set);
     e["RTS.Duration"]        = (c, s) => c.Get(RiseTransitSet, s.Number).Duration;
     e["RTS.RiseAzimuth"]     = (c, s) => c.Get(RiseTransitSet, s.Number).RiseAzimuth;
     e["RTS.TransitAltitude"] = (c, s) => c.Get(RiseTransitSet, s.Number).TransitAltitude;
     e["RTS.SetAzimuth"]      = (c, s) => c.Get(RiseTransitSet, s.Number).SetAzimuth;
     e["Visibility.Begin"]    = (c, s) => c.GetDateFromTime(c.Get(VisibilityDetails, s.Number).Begin);
     e["Visibility.End"]      = (c, s) => c.GetDateFromTime(c.Get(VisibilityDetails, s.Number).End);
     e["Visibility.Duration"] = (c, s) => c.Get(VisibilityDetails, s.Number).Duration;
     e["Visibility.Period"]   = (c, s) => c.Get(VisibilityDetails, s.Number).Period;
 }
Example #17
0
        public void GetInfo(CelestialObjectInfo <Nova> info)
        {
            Nova       n             = info.Body;
            SkyContext c             = info.Context;
            string     constellation = Constellations.FindConstellation(c.Get(Equatorial, n), c.JulianDay);
            int        year          = c.GetDate(c.JulianDay).Year;
            var        offset        = c.GeoLocation.UtcOffset;
            var        jd0           = Date.DeltaT(c.JulianDay) / 86400.0 + Date.JulianDay0(year) - offset / 24;

            info
            .SetTitle(string.Join(", ", info.Body.Names))
            .SetSubtitle(Text.Get("Nova.Type"))
            .AddRow("Constellation", constellation)

            .AddHeader(Text.Get("Nova.Equatorial"))
            .AddRow("Equatorial.Alpha")
            .AddRow("Equatorial.Delta")

            .AddHeader(Text.Get("Nova.Equatorial0"))
            .AddRow("Equatorial0.Alpha", n.Equatorial0.Alpha, Formatters.RA)
            .AddRow("Equatorial0.Delta", n.Equatorial0.Delta, Formatters.Dec)

            .AddHeader(Text.Get("Nova.Horizontal"))
            .AddRow("Horizontal.Azimuth")
            .AddRow("Horizontal.Altitude")

            .AddHeader(Text.Get("Nova.Properties"))
            .AddRow("Magnitude")
            .AddRow("PeakDate", new Date(n.JulianDayPeak), Formatters.Date)
            .AddRow("MaxMagnitude", n.MaxMagnitude, Formatters.Magnitude)
            .AddRow("MinMagnitude", n.MinMagnitude, Formatters.Magnitude)
            .AddRow("Type", n.NovaType + NovaTypeDescription(n))

            .AddHeader(Text.Get("Nova.RTS"))
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration");
        }
        public void ConfigureEphemeris(EphemerisConfig <JupiterMoon> e)
        {
            e["Constellation"]    = (c, jm) => Constellations.FindConstellation(c.Get(JupiterMoon_Equatorial, jm.Number), c.JulianDay);
            e["Equatorial.Alpha"] = (c, jm) => c.Get(JupiterMoon_Equatorial, jm.Number).Alpha;
            e["Equatorial.Delta"] = (c, jm) => c.Get(JupiterMoon_Equatorial, jm.Number).Delta;

            e["Horizontal.Altitude"] = (c, jm) => c.Get(JupiterMoon_Horizontal, jm.Number).Altitude;
            e["Horizontal.Azimuth"]  = (c, jm) => c.Get(JupiterMoon_Horizontal, jm.Number).Azimuth;

            e["Rectangular.X"] = (c, jm) => c.Get(JupiterMoon_Rectangular, jm.Number).X;
            e["Rectangular.Y"] = (c, jm) => c.Get(JupiterMoon_Rectangular, jm.Number).Y;
            e["Rectangular.Z"] = (c, jm) => c.Get(JupiterMoon_Rectangular, jm.Number).Z;
            e["Magnitude"]     = (c, jm) => c.Get(JupiterMoon_Magnitude, jm.Number);

            e["Phase"]           = (c, jm) => c.Get(Planet_Phase, Planet.JUPITER);
            e["PhaseAngle"]      = (c, jm) => c.Get(Planet_PhaseAngle, Planet.JUPITER);
            e["AngularDiameter"] = (c, jm) => c.Get(JupiterMoon_Semidiameter, jm.Number) * 2 / 3600.0;
            e["Appearance.CM"]   = (c, jm) => c.Get(JupiterMoon_CentralMeridian, jm.Number);

            e["RTS.Rise"]     = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.JUPITER).Rise);
            e["RTS.Transit"]  = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.JUPITER).Transit);
            e["RTS.Set"]      = (c, p) => c.GetDateFromTime(c.Get(Planet_RiseTransitSet, Planet.JUPITER).Set);
            e["RTS.Duration"] = (c, p) => c.Get(Planet_RiseTransitSet, Planet.JUPITER).Duration;
        }
Example #19
0
 public void ConfigureEphemeris(EphemerisConfig <Moon> e)
 {
     e["Constellation"]       = (c, m) => Constellations.FindConstellation(c.Get(Equatorial), c.JulianDay);
     e["RTS.Rise"]            = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Rise);
     e["RTS.RiseAzimuth"]     = (c, m) => c.Get(RiseTransitSet).RiseAzimuth;
     e["RTS.Transit"]         = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Transit);
     e["RTS.TransitAltitude"] = (c, m) => c.Get(RiseTransitSet).TransitAltitude;
     e["RTS.Set"]             = (c, m) => c.GetDateFromTime(c.Get(RiseTransitSet).Set);
     e["RTS.SetAzimuth"]      = (c, m) => c.Get(RiseTransitSet).SetAzimuth;
     e["RTS.Duration"]        = (c, m) => c.Get(RiseTransitSet).Duration;
     e["Equatorial.Alpha"]    = (c, m) => c.Get(Equatorial).Alpha;
     e["Equatorial.Delta"]    = (c, m) => c.Get(Equatorial).Delta;
     e["Equatorial0.Alpha"]   = (c, m) => c.Get(Equatorial0).Alpha;
     e["Equatorial0.Delta"]   = (c, m) => c.Get(Equatorial0).Delta;
     e["Horizontal.Altitude"] = (c, m) => c.Get(Horizontal).Altitude;
     e["Horizontal.Azimuth"]  = (c, m) => c.Get(Horizontal).Azimuth;
     e["Ecliptical.Lambda"]   = (c, m) => c.Get(Ecliptical0).Lambda;
     e["Ecliptical.Beta"]     = (c, m) => c.Get(Ecliptical0).Beta;
     e["Phase"]      = (c, m) => c.Get(Phase);
     e["PhaseAngle"] = (c, m) => c.Get(PhaseAngle);
     e["Age"]        = (c, m) => c.Get(Age);
     e["Magnitude"]  = (c, m) => c.Get(Magnitude);
     e["Distance", new LunarDistanceFormatter()] = (c, m) => (int)c.Get(Ecliptical0).Distance;
     e["HorizontalParallax"] = (c, m) => c.Get(Parallax);
     e["AngularDiameter"]    = (c, m) => c.Get(Semidiameter) * 2 / 3600.0;
     e["Libration.Latitude", new LibrationLatitudeFormatter()]   = (c, m) => c.Get(LibrationElements).b;
     e["Libration.Longitude", new LibrationLongitudeFormatter()] = (c, m) => c.Get(LibrationElements).l;
     e["Phases.NewMoon", Formatters.DateTime]        = (c, m) => c.Get(NearestPhase, MoonPhase.NewMoon);
     e["Phases.FirstQuarter", Formatters.DateTime]   = (c, m) => c.Get(NearestPhase, MoonPhase.FirstQuarter);
     e["Phases.FullMoon", Formatters.DateTime]       = (c, m) => c.Get(NearestPhase, MoonPhase.FullMoon);
     e["Phases.LastQuarter", Formatters.DateTime]    = (c, m) => c.Get(NearestPhase, MoonPhase.LastQuarter);
     e["Apsis.Apogee", Formatters.DateTime]          = (c, m) => c.Get(NearestApsis, MoonApsis.Apogee);
     e["Apsis.Perigee", Formatters.DateTime]         = (c, m) => c.Get(NearestApsis, MoonApsis.Perigee);
     e["MaxDeclinations.North", Formatters.DateTime] = (c, m) => c.Get(NearestMaxDeclination, MoonDeclination.North);
     e["MaxDeclinations.South", Formatters.DateTime] = (c, m) => c.Get(NearestMaxDeclination, MoonDeclination.South);
 }
Example #20
0
 public static void GenerateConstellation(CharacterData character)
 {
     character.PatronConstellation = Constellations.FindConstellation(character.Birthday.GetMonth());
     Constellations.GainBoon(character, character.PatronConstellation);
 }
Example #21
0
        public void GetInfo(CelestialObjectInfo <DeepSky> info)
        {
            DeepSky     ds            = info.Body;
            SkyContext  c             = info.Context;
            DeepSkyInfo details       = c.Get(ReadDeepSkyDetails, ds);
            string      constellation = Constellations.FindConstellation(c.Get(Equatorial, ds), c.JulianDay);

            info.SetSubtitle(ds.Status.ToString())
            .SetTitle(string.Join(" / ", ds.Names))
            .AddRow("Constellation", constellation)

            .AddHeader("Equatorial coordinates (current epoch)")
            .AddRow("Equatorial.Alpha", ds.Equatorial.Alpha)
            .AddRow("Equatorial.Delta", ds.Equatorial.Delta)

            .AddHeader("Equatorial coordinates (J2000.0 epoch)")
            .AddRow("Equatorial0.Alpha", ds.Equatorial0.Alpha)
            .AddRow("Equatorial0.Delta", ds.Equatorial0.Delta)

            .AddHeader("Horizontal coordinates")
            .AddRow("Horizontal.Azimuth", ds.Horizontal.Azimuth)
            .AddRow("Horizontal.Altitude", ds.Horizontal.Altitude)

            .AddHeader("Visibility")
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader("Properties");

            info.AddRow("DeepSky.Type", details.ObjectType);
            if (ds.Mag != null)
            {
                info.AddRow("VisualMagnitude", ds.Mag, Formatters.Magnitude);
            }
            if (details.PhotoMagnitude != null)
            {
                info.AddRow("PhotoMagnitude", details.PhotoMagnitude, Formatters.Magnitude);
            }
            if (details.SurfaceBrightness != null)
            {
                info.AddRow("Brightness", details.SurfaceBrightness, Formatters.SurfaceBrightness);
            }

            if (ds.SizeA > 0)
            {
                string size = $"{Formatters.AngularDiameter.Format(ds.SizeA / 60)}";
                if (ds.SizeB > 0)
                {
                    size += $" x {Formatters.AngularDiameter.Format(ds.SizeB / 60)}";
                }
                info.AddRow("AngularDiameter", size, Formatters.Simple);
            }
            if (ds.PA > 0)
            {
                info.AddRow("Position angle", ds.PA, Formatters.RotationAxis);
            }

            if (details.Identifiers.Any() || details.PGC != null)
            {
                info.AddHeader("Designations");
                if (details.Identifiers.Any())
                {
                    info.AddRow("Other catalogs identifiers", string.Join(", ", details.Identifiers));
                }
                if (details.PGC != null)
                {
                    info.AddRow("PGC catalog number", string.Join(", ", details.PGC));
                }
            }

            if (!string.IsNullOrEmpty(details.Remarks))
            {
                info.AddRow("Remarks", details.Remarks);
            }
        }
Example #22
0
        public void GetInfo(CelestialObjectInfo <DeepSky> info)
        {
            DeepSky     ds            = info.Body;
            SkyContext  c             = info.Context;
            DeepSkyInfo details       = c.Get(ReadDeepSkyDetails, ds);
            string      constellation = Constellations.FindConstellation(c.Get(Equatorial, ds), c.JulianDay);

            info
            .SetSubtitle(Text.Get("DeepSky.Status." + ds.Status.ToString()))
            .SetTitle(string.Join(" / ", ds.Names))
            .AddRow("Constellation", constellation)

            .AddHeader(Text.Get("DeepSky.Equatorial"))
            .AddRow("Equatorial.Alpha", ds.Equatorial.Alpha)
            .AddRow("Equatorial.Delta", ds.Equatorial.Delta)

            .AddHeader(Text.Get("DeepSky.Equatorial0"))
            .AddRow("Equatorial0.Alpha", ds.Equatorial0.Alpha)
            .AddRow("Equatorial0.Delta", ds.Equatorial0.Delta)

            .AddHeader(Text.Get("DeepSky.Horizontal"))
            .AddRow("Horizontal.Azimuth", ds.Horizontal.Azimuth)
            .AddRow("Horizontal.Altitude", ds.Horizontal.Altitude)

            .AddHeader(Text.Get("DeepSky.RTS"))
            .AddRow("RTS.Rise")
            .AddRow("RTS.Transit")
            .AddRow("RTS.Set")
            .AddRow("RTS.Duration")

            .AddHeader(Text.Get("DeepSky.Properties"));

            info.AddRow("Type", details.ObjectType);
            if (ds.Mag != null)
            {
                info.AddRow("VisualMagnitude", ds.Mag, Formatters.Magnitude);
            }
            if (details.PhotoMagnitude != null)
            {
                info.AddRow("PhotoMagnitude", details.PhotoMagnitude, Formatters.Magnitude);
            }
            if (details.SurfaceBrightness != null)
            {
                info.AddRow("SurfaceBrightness", details.SurfaceBrightness, new Formatters.SignedDoubleFormatter(2, " mag/sq.arcsec"));
            }

            if (ds.SizeA > 0)
            {
                string size = $"{Formatters.Angle.Format(ds.SizeA / 60)}";
                if (ds.SizeB > 0)
                {
                    size += $" x {Formatters.Angle.Format(ds.SizeB / 60)}";
                }
                info.AddRow("AngularDiameter", size, Formatters.Simple);
            }
            if (ds.PA > 0)
            {
                info.AddRow("PositionAngle", ds.PA, new Formatters.UnsignedDoubleFormatter(2, "\u00B0"));
            }

            if (details.Identifiers.Any() || details.PGC != null)
            {
                info.AddHeader(Text.Get("DeepSky.Designations"));
                if (details.Identifiers.Any())
                {
                    info.AddRow("OtherCatalogsIdentifiers", string.Join(", ", details.Identifiers));
                }
                if (details.PGC != null)
                {
                    info.AddRow("PGCCatalogNumber", string.Join(", ", details.PGC));
                }
            }

            if (!string.IsNullOrEmpty(details.Remarks))
            {
                info.AddRow("Remarks", details.Remarks);
            }
        }