Best thread on this list in quite a while, thank you so much, both Jean and 
Eric.

I’m interested to see any info you could provide on the decision-making and 
resulting mplementation!

Thank You,
Troy

> On Jun 20, 2020, at 11:27 PM, Eric Jensen <ejens...@swarthmore.edu> wrote:
> 
> Hi Jean, 
> 
> As an astronomer, this message caught my eye, so I thought I’d make a few 
> comments.  Before I do, I want to say that (a) I appreciate people working on 
> astronomical code, which can be tricky, and (b) my goal here is to be helpful 
> rather than annoyingly pedantic.  If I appear to fail at (b), I hope you’ll 
> take it as a failure to convey the right tone by email rather than anything 
> else.  Some of the background below is likely to be things you already know, 
> but I’m trying to be complete. 
> 
> That said, I’d encourage you *not* to make the selection of this parameter a 
> user choice, simply because it can’t be the case that both values are correct 
> - so you’re putting the user in the position of trying to guess which is the 
> right answer, which isn’t helpful to people who want to use your code. 
> 
> As you note, 15 degrees per hour (where “hour” here is a mean solar hour, 
> i.e. the time we normally use) is the speed that the Earth rotates compared 
> to the average position of the Sun.  (The “mean Sun” is a convenient 
> fictitious object that moves at a constant rate throughout the year, whereas 
> the real Sun doesn’t, due to the Earth’s slightly elliptical orbit and tilted 
> axis.)   But that rate combines both the Earth’s rotation on its axis and its 
> motion around the Sun - because it moves in its orbit each day, it has to 
> rotate a little more than 360 degrees (relative to some distant reference 
> frame) to get the Sun back to the same position in the sky.  So the Earth’s 
> rotation rate compared to a distant reference frame (e.g. the stars) is 
> 15.04107 degrees per hour, so it rotates 360 degrees in 23 hours and 56 
> minutes (a “sidereal day”), and rotates about 361 degrees in a mean solar day 
> (24 hours).    (To easily derive that “magic value”, you can note that the 
> Earth will have completed 365.25 rotations with respect to the Sun in one 
> year, but one extra rotation with respect to the stars; the ratio 
> 366.25/365.25 is the same as the ratio of your two factors.) 
> 
> So if you’re calculating the Sun’s position based on some coordinate system 
> fixed to the (distant) sky rather than the Sun (which I assume must be what 
> you’re doing), you need to use the Earth’s rotation speed compared to that 
> coordinate system, which is the larger value (15.04107).
> 
> The question still remains of why you’re getting different answers from 
> different other codes you’re comparing to.  While it’s possible that some are 
> simply wrong, my best guess would be that some are taking into account 
> refraction by the Earth’s atmosphere and some are not.  Because the path of a 
> light ray is bent as it travels through air, it turns out that when you see 
> the bottom limb of the Sun touch the horizon, the whole Sun is already below 
> the horizon!  The exact amount of refraction depends on atmospheric pressure 
> and temperature, but on average it’s about 0.6 degrees (which coincidentally 
> is about the angular diameter of the Sun).  That slightly more than half a 
> degree translates to about two minutes of time, so if that’s about the 
> difference you’re seeing, that could be the cause.  
> 
> The other reason could be different definitions of sunset, i.e. is it defined 
> by when the top limb of the Sun is at the horizon?  Or the center?  Or is it 
> some other distance below the horizon?  (You list 0.833 degrees below, which 
> is a combination of the average refraction and the Sun’s angular radius, i.e. 
> it’s when the upper limb of the Sun would appear to go below the horizon, 
> given average refraction.)   But other other codes might make other 
> assumptions that could lead to differences, i.e. they could be separately 
> accounting for refraction on top of a specified angle of the Sun below the 
> horizon. 
> 
> I suspect that I haven’t told you much (if anything!) that you didn’t know 
> already, but maybe the background is useful for others reading the thread.  
> But the bottom line is that again I encourage you to dig a little deeper to 
> try to find the source of the differences rather than exposing this as a user 
> choice. 
> 
> As for authoritative sources to compare to, as Bill Ricker notes, the USNO is 
> generally my go-to source.  Unfortunately, their website has been down for 
> months as they reorganize, and unfortunately looks like it will still be a 
> while.  (https://datacenter.iers.org/data/2/message_400.txt - that’s about 
> the IERS but the same is true for the astronomical parts of the USNO 
> website.)  So without access to USNO, I’d be inclined to compare to NOAA, who 
> at least are clear on their website that they are including refraction - they 
> say they assume 0.833 degrees of refraction, though as noted above I think of 
> that value as including both 0.6 degrees of refraction *and* the angular 
> radius of the Sun, so maybe there’s still a little ambiguity there. 
> 
> If you want to compare against a different Perl solution, in my own 
> astro-related code I make use of Astro::Coords and Astro::Telescope, which 
> depend on Astro::PAL, a Perl interface to a widely-used positional astronomy 
> library.  I’d be curious to hear what you find if you compare your code to 
> those.  (Or perhaps I can try to make a comparison later, but I need to go to 
> bed now, and this message is too long already!) 
> 
> Hope some of this is at least a little helpful, and I’m curious to see where 
> you end up - 
> 
> With best wishes,
> 
> Eric
> 
> 
>> On Jun 19, 2020, at 12:03 PM, Jean Forget <j2n-for...@orange.fr> wrote:
>> 
>> Following the creation of RT ticket
>> https://rt.cpan.org/Public/Bug/Display.html?id=132336
>> I have decided to implement the proper precise algorithm in
>> DateTime::Event::Sunrise (already implemented in Astro::Sunrise) and
>> to check the values with NOAA's solar calculator and with Stellarium.
>> 
>> After I have implemented the proper precise algorithm, there are still
>> differences between the values obtained by Stellarium and the NOAA on
>> one side and by DT::E::S on the other side. I have found that these
>> differences are the caused by the "magic" values 15 and 15.04107 used
>> in the module.
>> 
>> 15.04107 is the angular speed of Earth's spin, while 15 is the
>> combination of Earth's spin with the orbital speed of the
>> Sun-Earth system. According to Paul Schlyter 's description of
>> the precise algorithm, we should use 15.04107, but I have found
>> that using 15 instead gives results closer to Stellarium.
>> 
>> More abstractly, the problem is: when you are an low-level
>> amateur astronomer, who is an authoritative source for you?
>> Whom do you trust? Paul Schlyter or the Stellarium team or
>> the NOAA?
>> 
>> I have decided to defer this question to the module user. There is a
>> new parameter, "algo", which lets the user choose between trusting
>> Paul Schlyter more than Stellarium or trusting Stellarium more
>> than Paul Schlyter.
>> 
>> Now you may code either
>> 
>> my $sunriseset = DateTime::Event::Sunrise->new(
>>                    latitude  => 42.3358,
>>                    longitude => -71.2044,
>>                    altitude  => '-0.833',
>>                    precise   => 1,
>>                    algo      => 'Schlyter');
>> 
>> or
>> 
>> my $sunriseset = DateTime::Event::Sunrise->new(
>>                    latitude  => 42.3358,
>>                    longitude => -71.2044,
>>                    altitude  => '-0.833',
>>                    precise   => 1,
>>                    algo      => 'Stellarium');
>> 
>> Can you think of a better name for the new option? The creator of
>> ticket 132336 suggests
>>         spin => 15.04107,
>> or
>>         spin => 15,
>> 
>> The problem is that the "magic" value 15.04107 is not easy to remember,
>> especially if the module user knows even less astronomy than myself.
>> While "Schlyter" and "Stellarium" are easier to remember.
>> 
>> I will release the new version of DT::E::S to CPAN next week.
>> If you have a better idea for the name of the new parameter, please
>> tell me before this release.
>> 
>> In the meantime, the updated code is available on Github.
>> 
>> Thank you for your advice,
>> 
>> By the way, this is the second attempt to write this message
>> to the datetime mailing list. As it happened already, my first
>> attempt was lost somewhere and did not reach you or the websites
>> https://www.nntp.perl.org/group/perl.datetime/
>> and https://www.mail-archive.com/datetime@perl.org/.
>> 
>> Jean Forget
> 

Reply via email to