In [2]:
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib

matplotlib.rcParams.update({'font.size':18})
matplotlib.rcParams.update({'font.family':'serif'})

ftype = '.pdf'

In [3]:
from haystack_fraction_calculator import vol8d

In [4]:
vol8d(verbose=True)


Using given sky coverage values
Observer Sensitivity = 1.700E+01 Jy
Channel BW = 2.700E+00 Hz : Instrument BW = 8.000E+08 Hz
Time on Target = 3.000E+02 s
Sky Coverage = 1.060E+01 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 2.000E+07 Hz f_max = 1.150E+11 Hz : f_min = 1.000E+07 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 2.14851E+87 Hz2 m5 / W
Region 2 = 4.60200E+94 Hz2 m5 / W
Region 3 = 8.42970E+87 Hz2 m5 / W
Region 4 = 2.50409E+98 Hz2 m5 / W
Region 5 = 0.00000E+00 Hz2 m5 / W
Region 6 = 0.00000E+00 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 2.42612E+98 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.39669E+116 Hz2 m5 s / W
Total fraction of 8D volume for search = 3.79277E-19
Out[4]:
(<Quantity 6.39668715e+116 Hz2 m5 s / W>,
 <Quantity 2.4261173e+98 Hz2 m5 s / W>)

In [5]:
ztf0, ztf1 = vol8d(hayfile='ZTF_boundaries.txt', searchfile='ZTF_parameters.txt', verbose=True)


Using given sky coverage values
Observer Sensitivity = 1.860E-05 Jy
Channel BW = 1.000E+14 Hz : Instrument BW = 9.700E+13 Hz
Time on Target = 2.610E+04 s
Sky Coverage = 3.366E+04 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 3.330E+14 Hz f_max = 9.990E+14 Hz : f_min = 3.330E+14 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 1.05894E+87 Hz2 m5 / W
Region 2 = 5.09993E+105 Hz2 m5 / W
Region 3 = 0.00000E+00 Hz2 m5 / W
Region 4 = 0.00000E+00 Hz2 m5 / W
Region 5 = 1.00549E+87 Hz2 m5 / W
Region 6 = 1.22205E+106 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 4.63521E+111 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.16856E+127 Hz2 m5 s / W
Total fraction of 8D volume for search = 7.51425E-17

ZTF result

Using very simple assumptions/conversions, we see that ZTF offers a factor of 10-1000 better "haystack" coverage compared with the surveys listed in Wright+2018

If Wright+2018 likened their analysis to a large hot tub (8000 L) versus the Earth's oceans (1.335e21 L), then with ZTF we can search a modest above-ground swimming pool using only the r-band data!



In [6]:
lsst0, lsst1 = vol8d(hayfile='ZTF_boundaries.txt', searchfile='LSST_parameters.txt', verbose=True)


Using given sky coverage values
Observer Sensitivity = 4.700E-07 Jy
Channel BW = 1.000E+14 Hz : Instrument BW = 9.700E+13 Hz
Time on Target = 3.000E+04 s
Sky Coverage = 3.000E+04 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 3.330E+14 Hz f_max = 9.990E+14 Hz : f_min = 3.330E+14 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 1.04330E+91 Hz2 m5 / W
Region 2 = 2.01827E+107 Hz2 m5 / W
Region 3 = 0.00000E+00 Hz2 m5 / W
Region 4 = 0.00000E+00 Hz2 m5 / W
Region 5 = 9.90641E+90 Hz2 m5 / W
Region 6 = 4.83621E+107 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 1.87920E+113 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.16856E+127 Hz2 m5 s / W
Total fraction of 8D volume for search = 3.04641E-15

LSST result

With LSST the fraction is improved by at least 2 orders of magnitude due to photometric depth and increased observing baseline, or ~2 olympic swimming pools



In [7]:
evry0, evry1 = vol8d(hayfile='ZTF_boundaries.txt', searchfile='evryscope_parameters.txt', verbose=True)


Using given sky coverage values
Observer Sensitivity = 1.980E-04 Jy
Channel BW = 1.000E+14 Hz : Instrument BW = 9.700E+13 Hz
Time on Target = 2.628E+07 s
Sky Coverage = 1.840E+04 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 3.330E+14 Hz f_max = 9.990E+14 Hz : f_min = 3.330E+14 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 2.86412E+84 Hz2 m5 / W
Region 2 = 4.79084E+104 Hz2 m5 / W
Region 3 = 0.00000E+00 Hz2 m5 / W
Region 4 = 0.00000E+00 Hz2 m5 / W
Region 5 = 2.71956E+84 Hz2 m5 / W
Region 6 = 1.14799E+105 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 2.39665E+113 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.16856E+127 Hz2 m5 s / W
Total fraction of 8D volume for search = 3.88528E-15

Evryscope result

With Evryscope, if we use the 1-hour integrations of 2-min cadence (V=18.2 mag depth) the Haystack completness is actually comparable to LSST due to the incredible light curve coverage!

and with the 2-min depth (V=16.4), we're right between ZTF & LSST.



In [8]:
tess0, tess1 = vol8d(hayfile='ZTF_boundaries.txt', searchfile='TESS_parameters.txt', verbose=True)


Using given sky coverage values
Observer Sensitivity = 1.000E-03 Jy
Channel BW = 1.000E+14 Hz : Instrument BW = 9.700E+13 Hz
Time on Target = 2.330E+06 s
Sky Coverage = 3.523E+04 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 3.330E+14 Hz f_max = 9.990E+14 Hz : f_min = 3.330E+14 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 4.99637E+82 Hz2 m5 / W
Region 2 = 9.48587E+103 Hz2 m5 / W
Region 3 = 0.00000E+00 Hz2 m5 / W
Region 4 = 0.00000E+00 Hz2 m5 / W
Region 5 = 4.74418E+82 Hz2 m5 / W
Region 6 = 2.27302E+104 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 8.05534E+111 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.16856E+127 Hz2 m5 s / W
Total fraction of 8D volume for search = 1.30587E-16

TESS result

Like Evryscope, TESS has very dense light curves (at least 27 days worth) and very wide sky coverage. Despite the relatively shallow depth (1% photometry at 16th mag), TESS is an excellent platform to hunt for technosignatures.


In [9]:




In [ ]:

CRTS result

Catalina Real-time Transient Survey


In [24]:
crts0, crts1 = vol8d(hayfile='ZTF_boundaries.txt', searchfile='CRTS_parameters.txt', verbose=True)


Using given sky coverage values
Observer Sensitivity = 5.990E-05 Jy
Channel BW = 1.000E+14 Hz : Instrument BW = 9.700E+13 Hz
Time on Target = 7.500E+03 s
Sky Coverage = 3.300E+04 sq. degrees 

d_max = 3.260E+04 lyr : t_max = 3.330E+14 Hz f_max = 9.990E+14 Hz : f_min = 3.330E+14 Hz : Max. Rep Time = 1.000E+00 yr
EIRP for sensitivity max = 1.000E+13 W

Region 1 = 5.68968E+85 Hz2 m5 / W
Region 2 = 1.58362E+105 Hz2 m5 / W
Region 3 = 0.00000E+00 Hz2 m5 / W
Region 4 = 0.00000E+00 Hz2 m5 / W
Region 5 = 5.40249E+85 Hz2 m5 / W
Region 6 = 3.79469E+105 Hz2 m5 / W

Volume scanned in: frequency (1), transmitter BW (1), distance (3), sensitivity (1), repetition rate (1) and polarization (1) dimensions (8d) for search = 4.05486E+110 Hz2 m5 s / W
Total haystack volume in this 8d space = 6.16856E+127 Hz2 m5 s / W
Total fraction of 8D volume for search = 6.57343E-18

In [25]:
np.log10(crts1/crts0)


Out[25]:
$-17.182208 \; \mathrm{}$

A Comparison Plot


In [26]:
plt.figure(figsize=(8,5))

# plt.scatter(np.arange(4), [np.log10(ztf1/ztf0), np.log10(tess1/tess0), np.log10(lsst1/lsst0), np.log10(evry1/evry0)],
#            marker='o', s=100, alpha=0.7, c='k')
# plt.xticks(np.arange(4), ['ZTF', 'TESS', 'LSST', 'Evry'])


plt.scatter(np.arange(5), [np.log10(crts1/crts0), np.log10(ztf1/ztf0), np.log10(tess1/tess0), 
                           np.log10(lsst1/lsst0), np.log10(evry1/evry0)],
           marker='o', s=100, alpha=0.7, c='k')
plt.xticks(np.arange(5), ['CRTS','ZTF', 'TESS', 'LSST', 'Evry'])


plt.grid(True, alpha=0.3)
plt.ylabel('log $V_{Haystack}$')
plt.savefig('../figures/optical_haystack.pdf', dpi=300, bbox_inches='tight', pad_inches=0.25)



In [ ]: