<p>This strategy will get you started.</p>
<p>I downloaded the positions of the Moon and of DSCOVR from JPL's Horizons in 1 hour steps from about  2015-Feb-16 to 2023-May-29 with Earth's Geocenter as the origin, then calculated the separation angle from Geocenter to Lunacenter, then calculated the projected separation in kilometers of the luna center at the distance to Earth.</p>
<p>It's not an <em>exact</em> predictor of the tiniest of overlaps, but whenever the number is below say roughly 12,000 kilometers you should <em>go and look for</em> a lunar photobomb (appears somewhere within the frame) in the DSCOVR image database.</p>
<p>Note that one source of error will be that the trajectory for DSCOVR in Horizons is not NASA's home grown trajectory. It comes from the DSCOVR team and may have errors especially in the future prediction.</p>
<p>For more on that see answers to</p>
<ul>
<li><a href="https://space.stackexchange.com/q/45062/12102">Why hasn't DSCOVR's trajectory determination been updated in JPL's Horizons after 2015-Aug-4?</a> (it has been now!)</li>
</ul>
<p>I think the calculation can be refined, but I am not certain it's necessary.</p>
<p><a href="https://i.sstatic.net/w3XJn.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/w3XJn.png" alt="prediction of lunar photobombs of Earth as seen from DSCOVR" /></a></p>
<p>Table of predicted events:</p>
<pre><code>event approx date/time km projected
----- ---------------- ------------
 001 2015-Apr-16 13:00 8417
 002 2015-Jul-16 22:00 1584 https://www.nasa.gov/feature/goddard/from-a-million-miles-away-nasa-camera-shows-moon-crossing-face-of-earth
 003 2015-Sep-27 14:00 570
 004 2015-Nov-25 20:00 7602
 005 2016-Mar-22 16:00 4888
 006 2016-Jul-05 05:00 5178
 007 2016-Sep-16 04:00 7878
 008 2016-Sep-30 02:00 5392
 009 2016-Oct-15 12:00 11726
 010 2016-Nov-14 14:00 8127
 011 2016-Nov-30 01:00 11574
 012 2017-Mar-11 20:00 4739
 013 2017-Jun-24 18:00 8634
 014 2017-Oct-05 02:00 3944
 015 2017-Nov-04 07:00 10465
 016 2017-Nov-19 02:00 4518
 017 2017-Dec-04 08:00 11004
 018 2018-Mar-01 08:00 8926
 019 2018-Jun-28 18:00 10316
 020 2018-Sep-24 10:00 8942
 021 2018-Oct-08 21:00 7596
 022 2018-Oct-24 22:00 10120
 023 2018-Nov-23 23:00 3308
 024 2019-Jun-17 19:00 3944
 025 2019-Sep-28 15:00 9053
 026 2019-Oct-14 06:00 7765
 027 2019-Nov-13 10:00 8996
 028 2019-Nov-27 07:00 4272
 029 2020-Feb-22 18:00 7383
 030 2020-Jun-06 03:00 3348
 031 2020-Oct-02 08:00 3723
 032 2020-Nov-30 18:00 3850
 033 2021-Feb-11 01:00 6624
 034 2021-May-26 17:00 9368
 035 2021-Sep-21 12:00 4524
 036 2021-Dec-04 05:00 8681
 037 2021-Dec-18 15:00 5436
 038 2022-Jan-31 15:00 11547
 039 2022-Feb-16 10:00 8369
 040 2022-May-30 05:00 6875
 041 2022-Sep-10 22:00 10717
 042 2022-Dec-07 13:00 8934
 043 2022-Dec-22 17:00 5306
 044 2023-Jan-06 00:00 10221
 045 2023-Feb-05 13:00 2468
 046 2023-May-19 09:00 9001
</code></pre>
<p>After downloading the data from Horizons, here's the Python script I used to predict potential photobombs and generate the plots and table:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt

names = 'DSCOVR', 'MOON'

datas, linez, JDs = [], [], []
linez = []
for name in names:
    n_offset = 100
    fname = name + ' geocentric hourly horizons_results.txt'
    with open(fname, 'r') as infile:
        lines = infile.readlines()
    a = [i for (i, line) in enumerate(lines) if 'SOE' in line][0]
    b = [i for (i, line) in enumerate(lines) if 'EOE' in line][0]
    lines = lines[a+1+n_offset: b]
    linez.append(lines)
    print(len(lines))
    data = [[float(x) for x in line.split(',')[2:8]] for line in lines]
    datas.append(data)
    JD = [float(line.split(',')[0]) for line in lines]
    JDs.append(JD)

dates = [line.split(',')[1] for line in lines]

pd, pm = [np.array(thing)[:, :3] for thing in datas] # drop velocity
pe = np.zeros(3) # geocenter is origin

vdm = pm - pd
vde = pe - pd

rdm, rde = [np.sqrt((thing**2).sum(axis=1)) for thing in (vdm, vde)]

dot_product_of_normals = ((vdm * vde).sum(axis=1)) / (rdm * rde)

angle = np.arccos(dot_product_of_normals)

rproj = np.tan(angle) * rde

JD = np.array(JDs[0])
JD_rel = JD - 2459580.5 #relative to 2022-Jan-01 00:00 UTC
year = 2022 + JD_rel/365.2564

threshold = 1.2E+04

A = (rproj[:-1] &gt;= threshold) * (rproj[1:] &lt; threshold)
B = (rproj[:-1] &lt; threshold) * (rproj[1:] &gt;= threshold)
JD_in = JD[1:][A]
JD_out = JD[:-1][B]

indices = ((np.where(A)[0] + np.where(B)[0]) / 2.).astype(int)


fig, (ax1, ax2) = plt.subplots(2, 1)

ax1.plot(year, rproj)
ax1.set_ylim(0, threshold)
ax1.set_xlabel('year')
ax1.set_ylabel('projected radial distance of Moon at Earth (km)')
ax1.set_title('Lunar &quot;photobombs&quot; of Earth seen from DSCOVR')

duration = JD_out - JD_in
event_number = np.arange(1, len(duration) + 1)
ax2.plot(event_number, JD_out - JD_in)
ax2.set_xlabel('event number')
ax2.set_ylabel('approximate duration (days)')

plt.show()

for no, i in zip(event_number, indices):
    print('    ', str(1000+no)[1:], dates[i][6:23], int(rproj[i]))
</code></pre>

CC BY-SA 4.0
2022-01-24T00:54:25.057Z
Outstanding explanation and results, thanks. Your results provide confirmation that the image feed I linked to has lunar transits censored out of it (which is understandable given the probe's main scientific purpose) but also prompted me to discover while looking for alternative feeds that there are in fact [galleries](https://epic.gsfc.nasa.gov/galleries) posted periodically when a new transit occurs, the most recent being what you predicted as being event `033` in Feb 2021 (so the trajectory predictions still seem to be pretty good)
Will
CC BY-SA 4.0
2022-01-24T00:56:53.857Z
@Will Oh that's both weird and *excellent!* I'm glad to hear it. Except for event `002` I didn't check anything, so the data point confirmation is most appreciated.
uhoh
CC BY-SA 4.0
2022-01-23T02:31:08.220Z
2022-01-23T02:31:08.220Z
uhoh
<p>In 2015, NASA <a href="https://www.nasa.gov/feature/goddard/from-a-million-miles-away-nasa-camera-shows-moon-crossing-face-of-earth" rel="noreferrer">published the first images of the Moon transiting the Earth as seen from DSCOVR</a>. The text accompanying these images says such a transit would be captured on camera about twice a year.</p>
<p>I cannot find explicit reference to any such images that have been captured since that day, though they may be in plain sight among the <a href="https://epic.gsfc.nasa.gov/" rel="noreferrer">numerous daily images</a> published from the probe (though the day when the 2015 images were taken is missing from that page).</p>
<p>Am I right in thinking that if DSCOVR were stationed directly on L1, these transits would coincide with solar eclipses? And given the orbit that it actually follows, has it been calculated, or can it be calculated, when these (supposedly twice-yearly) transits have occurred?</p>

CC BY-SA 4.0
2022-01-21T23:17:45.403Z
For "Am I right in thinking that if DSCOVR were stationed directly on L1, these transits would coincide with solar eclipses?" Yes, thought there isn't exactly an L1 because the Earth's orbital motion is not exactly circular or even planar; the Earth-Moon system move about their common center of mass and the Moon's orbit is somewhat inclined. But basically... yes to that. For those interested in posting an answer see the mixed news at [Why hasn't DSCOVR's trajectory determination been updated in JPL's Horizons after 2015-Aug-4?](https://space.stackexchange.com/q/45062/12102) and check Horizons.
uhoh
<the-moon><earth><lagrange-point><transits-other-than-sun>
When does DSCOVR see the Moon transit Earth?
Will
# When does DSCOVR see the Moon transit Earth?

(Asked by: username_0 on 2022-01-20)

In 2015, NASA [published the first images of the Moon transiting the Earth as seen from DSCOVR](https://www.nasa.gov/feature/goddard/from-a-million-miles-away-nasa-camera-shows-moon-crossing-face-of-earth). The text accompanying these images says such a transit would be captured on camera about twice a year.

I cannot find explicit reference to any such images that have been captured since that day, though they may be in plain sight among the [numerous daily images](https://epic.gsfc.nasa.gov/) published from the probe (though the day when the 2015 images were taken is missing from that page).

Am I right in thinking that if DSCOVR were stationed directly on L1, these transits would coincide with solar eclipses? And given the orbit that it actually follows, has it been calculated, or can it be calculated, when these (supposedly twice-yearly) transits have occurred?

**Tags:** the-moon, earth, lagrange-point, transits-other-than-sun
> **Comments:**
> **username_1**: For "Am I right in thinking that if DSCOVR were stationed directly on L1, these transits would coincide with solar eclipses?" Yes, thought there isn't exactly an L1 because the Earth's orbital motion is not exactly circular or even planar; the Earth-Moon system move about their common center of mass and the Moon's orbit is somewhat inclined. But basically... yes to that. For those interested in posting an answer see the mixed news at [Why hasn't DSCOVR's trajectory determination been updated in JPL's Horizons after 2015-Aug-4?](https://space.stackexchange.com/q/45062/12102) and check Horizons.  

---

## 1 answers

### Answer by username_1 on 2022-01-23. Score: 2 | Accepted answer

This strategy will get you started.
I downloaded the positions of the Moon and of DSCOVR from JPL's Horizons in 1 hour steps from about  2015-Feb-16 to 2023-May-29 with Earth's Geocenter as the origin, then calculated the separation angle from Geocenter to Lunacenter, then calculated the projected separation in kilometers of the luna center at the distance to Earth.
It's not an exact predictor of the tiniest of overlaps, but whenever the number is below say roughly 12,000 kilometers you should go and look for a lunar photobomb (appears somewhere within the frame) in the DSCOVR image database.
Note that one source of error will be that the trajectory for DSCOVR in Horizons is not NASA's home grown trajectory. It comes from the DSCOVR team and may have errors especially in the future prediction.
For more on that see answers to

Why hasn't DSCOVR's trajectory determination been updated in JPL's Horizons after 2015-Aug-4? (it has been now!)

I think the calculation can be refined, but I am not certain it's necessary.

Table of predicted events:
event approx date/time km projected
----- ---------------- ------------
 001 2015-Apr-16 13:00 8417
 002 2015-Jul-16 22:00 1584 https://www.nasa.gov/feature/goddard/from-a-million-miles-away-nasa-camera-shows-moon-crossing-face-of-earth
 003 2015-Sep-27 14:00 570
 004 2015-Nov-25 20:00 7602
 005 2016-Mar-22 16:00 4888
 006 2016-Jul-05 05:00 5178
 007 2016-Sep-16 04:00 7878
 008 2016-Sep-30 02:00 5392
 009 2016-Oct-15 12:00 11726
 010 2016-Nov-14 14:00 8127
 011 2016-Nov-30 01:00 11574
 012 2017-Mar-11 20:00 4739
 013 2017-Jun-24 18:00 8634
 014 2017-Oct-05 02:00 3944
 015 2017-Nov-04 07:00 10465
 016 2017-Nov-19 02:00 4518
 017 2017-Dec-04 08:00 11004
 018 2018-Mar-01 08:00 8926
 019 2018-Jun-28 18:00 10316
 020 2018-Sep-24 10:00 8942
 021 2018-Oct-08 21:00 7596
 022 2018-Oct-24 22:00 10120
 023 2018-Nov-23 23:00 3308
 024 2019-Jun-17 19:00 3944
 025 2019-Sep-28 15:00 9053
 026 2019-Oct-14 06:00 7765
 027 2019-Nov-13 10:00 8996
 028 2019-Nov-27 07:00 4272
 029 2020-Feb-22 18:00 7383
 030 2020-Jun-06 03:00 3348
 031 2020-Oct-02 08:00 3723
 032 2020-Nov-30 18:00 3850
 033 2021-Feb-11 01:00 6624
 034 2021-May-26 17:00 9368
 035 2021-Sep-21 12:00 4524
 036 2021-Dec-04 05:00 8681
 037 2021-Dec-18 15:00 5436
 038 2022-Jan-31 15:00 11547
 039 2022-Feb-16 10:00 8369
 040 2022-May-30 05:00 6875
 041 2022-Sep-10 22:00 10717
 042 2022-Dec-07 13:00 8934
 043 2022-Dec-22 17:00 5306
 044 2023-Jan-06 00:00 10221
 045 2023-Feb-05 13:00 2468
 046 2023-May-19 09:00 9001

After downloading the data from Horizons, here's the Python script I used to predict potential photobombs and generate the plots and table:
import numpy as np
import matplotlib.pyplot as plt

names = 'DSCOVR', 'MOON'

datas, linez, JDs = [], [], []
linez = []
for name in names:
    n_offset = 100
    fname = name + ' geocentric hourly horizons_results.txt'
    with open(fname, 'r') as infile:
        lines = infile.readlines()
    a = [i for (i, line) in enumerate(lines) if 'SOE' in line][0]
    b = [i for (i, line) in enumerate(lines) if 'EOE' in line][0]
    lines = lines[a+1+n_offset: b]
    linez.append(lines)
    print(len(lines))
    data = [[float(x) for x in line.split(',')[2:8]] for line in lines]
    datas.append(data)
    JD = [float(line.split(',')[0]) for line in lines]
    JDs.append(JD)

dates = [line.split(',')[1] for line in lines]

pd, pm = [np.array(thing)[:, :3] for thing in datas] # drop velocity
pe = np.zeros(3) # geocenter is origin

vdm = pm - pd
vde = pe - pd

rdm, rde = [np.sqrt((thing**2).sum(axis=1)) for thing in (vdm, vde)]

dot_product_of_normals = ((vdm * vde).sum(axis=1)) / (rdm * rde)

angle = np.arccos(dot_product_of_normals)

rproj = np.tan(angle) * rde

JD = np.array(JDs[0])
JD_rel = JD - 2459580.5 #relative to 2022-Jan-01 00:00 UTC
year = 2022 + JD_rel/365.2564

threshold = 1.2E+04

A = (rproj[:-1] >= threshold) * (rproj[1:] < threshold)
B = (rproj[:-1] < threshold) * (rproj[1:] >= threshold)
JD_in = JD[1:][A]
JD_out = JD[:-1][B]

indices = ((np.where(A)[0] + np.where(B)[0]) / 2.).astype(int)


fig, (ax1, ax2) = plt.subplots(2, 1)

ax1.plot(year, rproj)
ax1.set_ylim(0, threshold)
ax1.set_xlabel('year')
ax1.set_ylabel('projected radial distance of Moon at Earth (km)')
ax1.set_title('Lunar "photobombs" of Earth seen from DSCOVR')

duration = JD_out - JD_in
event_number = np.arange(1, len(duration) + 1)
ax2.plot(event_number, JD_out - JD_in)
ax2.set_xlabel('event number')
ax2.set_ylabel('approximate duration (days)')

plt.show()

for no, i in zip(event_number, indices):
    print('    ', str(1000+no)[1:], dates[i][6:23], int(rproj[i]))

> **Comments:**
> **username_0**: Outstanding explanation and results, thanks. Your results provide confirmation that the image feed I linked to has lunar transits censored out of it (which is understandable given the probe's main scientific purpose) but also prompted me to discover while looking for alternative feeds that there are in fact [galleries](https://epic.gsfc.nasa.gov/galleries) posted periodically when a new transit occurs, the most recent being what you predicted as being event `033` in Feb 2021 (so the trajectory predictions still seem to be pretty good)  
> **username_1**: @Will Oh that's both weird and *excellent!* I'm glad to hear it. Except for event `002` I didn't check anything, so the data point confirmation is most appreciated.  

---

