phanerozoic commited on
Commit
dfcb65c
·
verified ·
1 Parent(s): 94fea4e

Explain the remaining switch-offs, warm stars and W1 dimmers, refit the dark comets' normal terms with radar, and add four null tests

Browse files
LEDGER.md CHANGED
@@ -223,7 +223,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
223
  | Unique variables next door | GCVS stars of the unique type; Gaia DR3 by CDS XMatch; SIMBAD | 13 of 93 within 100 pc, every one of a natural kind: five L dwarfs whose clouds turn with them, four magnetic white dwarfs carrying spots round (GD 356 among them, with its emission lines), the AM CVn binary GP Com, the gamma Doradus pulsator V2118 Oph, the spotted binary AS Dra, and UU CrB, whose one event is the 1980 superflare Schaefer, King & Deliyannis (2000) list on an ordinary F8 dwarf (`gcvs_unique_near`) |
224
  | Gamma rays from cold white dwarfs | Gentile Fusillo et al. (2021): 12007 white dwarfs within 100 pc below 8000 K; Fermi-LAT 4FGL-DR4 | 28 inside an unassociated 95 per cent ellipse against 22-54 (mean 36.4) moved 1 deg; 39 more inside ellipses the catalogue gives to blazars, radio galaxies, pulsars, supernova remnants and the binary V918 Sco (`fermi_cold_white_dwarfs`) |
225
  | Hard X-rays from the nearest stars | Gaia Catalogue of Nearby Stars: 2575 objects within 20 pc; Swift-BAT 105-month and 150-month catalogues (14-195 keV) | 0 inside a BAT error circle against 0-6 (mean 2.5) moved 1 deg; none of BAT's 13 catalogued stars lies within 20 pc (`bat_nearest_stars`) |
226
- | Warm stars in Earth's transit zone | Gaia Catalogue of Nearby Stars with its WISE photometry; SIMBAD | 7 warm of 911 stars in the zone against 12.3 expected from the 186 of 13800 stars 1-5 deg away (p 0.96); the seven are bright G and K dwarfs, a giant and a double star (`etz_warm_stars`) |
227
  | Radio from Earth's transit zone | Gaia Catalogue of Nearby Stars north of -40 deg; VLASS epoch-1 components by CDS XMatch | 0 of 1502 zone stars with a 3 GHz source within 3 arcsec, against 0.74 from the 11 of 22386 stars 1-5 deg away and a mean of 0.5 with the zone moved 2 arcmin (`etz_vlass_stars`) |
228
  | Light at 4.6 um alone | Gaia Catalogue of Nearby Stars with its WISE photometry: 49753 stars at BP-RP 0.5-2.5 with W1, W2 and W3 measured; AllWISE flags; SIMBAD | 7 stars five widths above the W1-W2 locus with W1-W3 on it, against 7 as far below; 4 carry AllWISE contamination or extended-source flags, and the 3 left, K and M dwarfs 0.1 mag above the locus, are as common as the deficits (`w2_only_excess`) |
229
  | Glitches firing together | Jodrell Bank glitch catalogue (Basu et al. 2022): 285 glitches in 107 pulsars timed to 2 days or better | 13 pairs in different pulsars within their epoch uncertainties against a mean of 8.8 (95th percentile 14) with each pulsar's glitches moved 100-2000 days, as many or more in 0.11 of draws (`glitch_coincidences`) |
@@ -259,7 +259,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
259
  | Planets on perfect circles | NASA Exoplanet Archive composite table: 1014 planets with periods beyond 30 d and a measured eccentricity (635 more fixed or limits), those whose upper eccentricity lies below 0.002 | none; the lowest percentile of upper eccentricities sits at 0.018 |
260
  | Asteroid spins on the clock | LCDB frequency-diameter table: 4172 secure rotation periods (U 3) quoted to three decimals between 2 and 48 h, those within 0.02 per cent of a whole number of hours against the half-hour windows and uniform fractions, the day's harmonics counted apart | 11 at whole hours against 12.8 expected and 12 at half-hours (Poisson p 0.73), 1 of them at a harmonic of the day |
261
  | Planets on whole days | NASA Exoplanet Archive composite table: 1494 planets with periods of 1.5-400 d known to better than 0.00002 d, those within 0.00002 d of a whole number of days against the half-day windows and uniform fractions | none, against 0.06 expected; none at half-days |
262
- | Light at 12 um alone | Gaia Catalogue of Nearby Stars with its WISE photometry: 3510 stars within 100 pc at BP-RP 0.5-2.5 with W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, W1-W3 more than five widths and five errors above the single-star locus at their colour with W1-W4 within two widths of its own, against the stars as far below; each read in AllWISE for flags and faint W3, in Gaia for a second source in the W3 beam and for a W4 excess at three errors | 27 above against 2 below; 6 carry AllWISE flags, 3 have a W4 excess at three errors (dust), and 18 K and M dwarfs with W3 of 7.6-8.8 mag and a 12 um excess of 0.3-0.5 mag remain unexplained, their W4 excess of 0.1-0.5 mag at one to three errors too coarse to separate warm dust from a narrow emitter |
263
  | Symmetric flares | Yang et al. (2023) TESS flare catalogue: 24232 of 60810 flares lasting 40 minutes or more, those whose rise from start to peak takes as long as the decay within 10 per cent of the duration, or longer, read by duration and by the star's flare count | 1034 symmetric and 4482 rising longer than decaying, a share that holds at every duration and on quiet and busy stars alike, so the catalogue's event boundaries set the shapes and no single flare's shape can be read from it |
264
  | Pulsars ticking in whole hertz | ATNF pulsar catalogue: 2118 of 2527 pulsars with periods quoted to eight digits or more, spin frequencies within 0.00001 Hz of a whole hertz or periods within 0.00001 ms of a whole millisecond, against the half-integer windows and uniform fractions; periods rounded to fewer digits counted apart | none against 0.085 expected, none at half-integers; 54 periods quoted to two to four digits land on the millisecond grid by rounding alone |
265
  | Pulsars on the hydrogen line's decimals | ATNF pulsar catalogue: 2118 pulsars with periods quoted to eight digits or more, spin frequencies within one part in 100,000 of 1420.405751 Hz scaled by a power of ten, against the windows shifted by half a decade and uniform logarithmic fractions | none against 0.018 expected, none at the half-decade shift |
@@ -277,7 +277,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
277
  | Transits longer than the star allows | NASA Exoplanet Archive composite table: 4328 transiting planets with a duration, period, semi-major axis and radii, those whose duration exceeds by a quarter the longest central transit a circular orbit allows at the catalogued geometry, each read for its duration error, the sources of its duration and stellar radius and its eccentricity | 188: 167 carry a stellar radius of the Kepler Input Catalogue era or a duration and a radius from different solutions, 8 have loose or missing duration errors, 7 are eccentric, 4 have eccentricities fixed without errors and WASP-132 b's duration stands off by itself; TOI-1295 b's 6.20 h, 1.38 times the maximum in one solution, stands against the TOI table's measured 3.75 h, 0.84 of it; none unexplained |
278
  | Gamma rays peaked like a line | Fermi-LAT 4FGL (HEASARC): 2766 sources above 10 sigma with a log-parabola curvature, those with beta above 0.8 at a curvature significance above 4, a spectrum peaked within a factor of a few in energy, against the catalogue's curvatures (median 0.10, 99th percentile 0.64); each read for its class and analysis flags | 3, all of known classes: the pulsars J1827-1446 and J1057-5851 and the globular cluster Terzan 1, whose cutoff spectra the log parabola bends to fit |
279
  | Nearby stars flickering by the minute | Gaia DR3 short-timescale variables within 100 pc: 909 stars, those whose characteristic frequency exceeds 48 cycles a day (the catalogue reaches 72), each read for its white-dwarf locus, its SIMBAD type, its image and RUWE flags and its colour, since a red dwarf the pipeline picks up flares and its variogram timescale is the flares' rise | 220: 35 white dwarfs and compact stars, 67 of other known types, 108 flaring red dwarfs; the 10 left are Gaia's: the table's frequencies pile up at 38-41, 51-55 and 66-69 cycles a day, where six of the 10 sit, five are catalogued rotators, an eclipsing binary or delta Scuti stars, and TESS two-minute light curves of four hold 3-13 ppm at Gaia's frequencies against its 13,000-27,000; none unexplained |
280
- | Infrared dimming next door | Gaia Catalogue of Nearby Stars within 20 pc with AllWISE W1 8-15: 1004 stars matched to AllWISE at 2010.5 and CatWISE2020 at 2015.0 within 3 arcsec, those whose profile W1 differs by more than 0.3 mag between the two means, against the stars that brightened as much; each read for Gaia's variability flag, RUWE and image flags, SIMBAD's type, the WISE flags, CatWISE's saturation brighter than 8.5 mag, the match separation and the proper motion, since a star moving a second a year is split between the epochs of CatWISE's coadds | 92 fainter in CatWISE against 2 brighter: 14 variables, 29 blends, 29 saturated or flagged, 16 matched to another source or split by their motion; 6 M6-L3 dwarfs moving 0.4-0.9 arcsec a year, fainter by 0.5-0.9 mag, remain unexplained and carry the fast movers' signature |
281
  | Systems turned face-on to us | NASA Exoplanet Archive composite table: 302 non-transiting planets with a measured inclination, those within 5 deg of face-on from either pole against the 0.4 per cent of random orientations, each read for its inclination error and method | 1 against 1.15 expected (binomial p 0.68): HD 204313 e, an astrometric orbit at 4 deg from the pole |
282
  | Masers at rest in the universe's frame | Pestalozzi et al. (2005) 6.7 GHz methanol masers: 519 peak velocities taken from the kinematic local standard of rest to the Sun and to the cosmic microwave background's frame, those within 2 km/s of rest there against the velocities' own density within 30 km/s of rest | 8 against 7.7 expected (Poisson p 0.50) |
283
  | Waste heat in HI-dark galaxies | Leisman et al. (2017) ALFALFA HI sources with low-surface-brightness counterparts: 115 positions matched to AllWISE within 10 arcsec, a source at 5 sigma in W3 or W4 against the positions moved 2 arcmin in eight directions scaled by the warm share of the matches, each read for an AGN colour and a Gaia star | 1 against 0.5 expected (p 0.37), AGC 188768 with an AGN's W1-W2 colour |
@@ -320,7 +320,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
320
  | Stars that jumped between 2MASS and Gaia | Gaia DR3 stars within 25 pc with a 2MASS counterpart: 4915, the Gaia position carried to the 2MASS night with the proper motion and that night's parallactic shift, against the 2MASS position | offsets of 0.10 arcsec median and 0.90 at the 99th percentile; 32 above 1 arcsec, 29 saturated, poor or flagged in 2MASS or Gaia and 3 blended with a second Gaia source in the 2MASS beam; none unexplained (`gaia_2mass_jumped`) |
321
  | Lurkers at Jupiter's far Lagrange point | JPL Small-Body Database: 16412 bodies within 0.35 au of Jupiter's semi-major axis with e below 0.3, their mean longitudes at the element epoch against Jupiter's, the count within 20 deg of the L3 point opposite the planet | 4 at L3 against 9414 and 5374 in the L4 and L5 swarms: 2 on arcs of days, 2 Trojans librating widely (2015 OL106 at 162 deg and 2020 BZ43 at 199 deg); none unexplained (`sbdb_jupiter_l3`) |
322
  | Waste heat at room temperature | Gaia Catalogue of Nearby Stars: 16037 stars at BP-RP 0.5-2.5 with clean Ks, W3 and W4, 175 with excess at both 12 and 22 um and 30 of them unflagged in AllWISE with a colour temperature from the excess flux ratio | 3 between 280 and 320 K against 1.5 in the bins beside (Poisson p 0.19); the excesses run from 100 to 320 K with none hotter; at the chance rate (`gcns_room_temperature_excess`) |
323
- | Warm stars in Jupiter's transit zone | Gaia Catalogue of Nearby Stars with its WISE photometry: 175 stars with W1 and W3 or W4 within 0.051 deg of Jupiter's orbital plane, the band that sees Jupiter transit the Sun, against the 13736 stars 1-5 deg from the plane; SIMBAD | 3 warm (HD 13997, HD 112250 and a G 14.9 star with W3 and W4 excess) against 2.36 expected from the band's share (p 0.42); with the ultraviolet count of the zone's stars this closes the Jupiter-zone programme (`jupiter_zone_warm_stars`) |
324
  | Two pulsars at one spot | ATNF pulsar catalogue (VizieR B/psr): 2358 pulsars outside globular clusters and the Magellanic Clouds, pairs within 2 arcmin, against the pairs the mirrored declinations give | 7 pairs against 7 mirrored: the double pulsar J0737-3039A and B bound to each other, the six others at different dispersion measures; none unexplained (`atnf_pulsars_one_spot`) |
325
  | Glitches on a schedule | Jodrell Bank glitch table: 34 pulsars with five or more dated glitches, the scatter of their glitch intervals as a fraction of the mean against 4000 draws of exponential intervals | 4 regular, J1420-6048 (scatter 0.20 of the mean, p below 2.5e-4), J2021+3651, J1023-5746 and J1709-4429 (0.27-0.29), every one a young pulsar of large Vela-like glitches, which recur at the crust's critical lag; none unexplained (`jbo_glitch_schedules`) |
326
  | Warm stars in the nearest clusters | Hunt and Reffert (2023): the 58 clusters and moving groups within 250 pc with 100 or more members, each member at BP-RP 0.5-2.5 matched to AllWISE, the share with W1-W3 five widths above the cluster's own locus against the field's 0.77 per cent, judged over the 58 | no cluster beyond chance over the 58; 23 warm stars, 13 flagged in AllWISE, 6 of known types; the highest shares in the clusters of 5-10 Myr (HSC 2986, OCSN 96, HSC 2907 at 5-6 per cent) and the Pleiades at 2.3 per cent; none unexplained (`clusters_warm_stars`) |
@@ -342,8 +342,8 @@ is its docstring, and its calls are in the recipes of `README.md`.
342
  | Stars that changed colour since Hipparcos | Hipparcos new reduction and Gaia DR3: 77746 stars with a B-V measured to 0.03 mag and a BP-RP, those five robust widths, five times the carried B-V error and 0.2 mag off the run of BP-RP with B-V; Hipparcos scatter, RUWE, Gaia's excess, SIMBAD's types and spectral classes | 1527 off the run: 386 saturated or with BP/RP excess, 538 variable, 135 binaries, 26 whose spectral class sides with Gaia against the Hipparcos B-V; 442 remain, stars whose Hipparcos B-V, compiled from ground photometry, is the only old colour and cannot be checked against a second (`hipparcos_gaia_colour_change`) |
343
  | Eclipsing binaries on whole days | Kepler eclipsing binary catalogue (Prsa et al. 2011, VizieR J/AJ/141/83): 1242 systems with periods between 0.5 and 50 d measured from space, those within 0.0002 d of a whole number of days against the periods' own density and the half-day windows | none against 0.5 expected; 2 at half-days (`kepler_eb_whole_days`) |
344
  | Retrograde co-orbitals of the giant planets | JPL Small-Body Database: bodies within 5 per cent of Jupiter's, Saturn's, Uranus's or Neptune's semi-major axis with inclination above 90 deg and eccentricity below 0.5 | 3, all at Jupiter: the published co-orbital (514107) Ka'epaoka'awela, 2007 VW266 published in the neighbouring 13/-14 resonance, and 2016 YB13, which fifty clones of its orbit hold in the resonance for thousands of years each way, a transient member; none unexplained (`sbdb_retrograde_coorbitals`) |
345
- | Radio sources that switched off | NVSS (VizieR VIII/65): 37223 compact sources above 100 mJy north of -40 deg and more than 10 deg from the Galactic plane, those without a VLASS epoch-1 quick-look component (J/ApJS/255/30) within 20 arcsec; SIMBAD, the artefact zones of sources above 5 Jy, RACS-low of 2019-2020 and the component list's own holes | 281 missing: 132 of known types, 12 beside sources above 5 Jy, 113 still shining in RACS-low or in holes of the component list; 24 remain, north of RACS-low's reach or unmatched in it, with VLASS components around them (`nvss_vlass_switchoffs`) |
346
- | Bodies pushed out of their orbital planes | JPL Small-Body Database: 113 comets and 10 asteroids with normal and radial non-gravitational terms, those whose normal term at 3 sigma exceeds half the radial; the ratio's distribution has a median of 0.19 and a 90th percentile of 0.86 | 28: 21 comets, whose polar jets push across the plane, 5 on arcs under 1000 d; the two near-Earth asteroids 2016 GW221 and 2013 XY20, whose normal terms rest on 209 and 72 observations, are dark comets of Seligman et al. (2024); none unexplained (`sbdb_out_of_plane`) |
347
  | Gamma rays harder than any shock | Fermi-LAT 4FGL-DR4 (HEASARC fermilpsc): 2766 sources above 10 sigma with a power-law index, those with an index below 1.3 at its upper error | none (`fermi_hard_spectra`) |
348
  | Stars whose distance changed since Hipparcos | Hipparcos new reduction and Gaia DR3: 98004 stars with both parallaxes, the differences in combined sigmas scaled by the sample's scatter of 1.24, those apart by 5 scaled sigma and 2 mas; the match's brightness, RUWE, Gaia's flags, Hipparcos's goodness of fit, SIMBAD and the Gaussian tail | 43: 3 matched to a Gaia source two magnitudes too faint, 27 binaries, 12 saturated or with poor solutions, 1 within the Gaussian tail (p 0.055); none unexplained (`hipparcos_gaia_parallax_change`) |
349
  | Lithium above the meteoritic | GALAH DR4 (Data Central): 124623 dwarfs with a clean fit and a clean lithium abundance to 0.15 dex at S/N above 40, those with A(Li) above 4.3 at the lower bound, a dex above the meteoritic and beyond what engulfing a giant planet adds; the stars between 3.6 and 4.3 counted as within engulfment's reach | 1 above 4.3, a 6600 K star where the line blends; 11 between 3.6 and 4.3; none unexplained (`galah_lithium_meteoritic`) |
@@ -371,7 +371,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
371
  | Spectra no stellar model fits | GALAH DR4: 1,379 dwarfs within 100 pc at red-arm S/N above 100; the worst 0.5 per cent of the spectral fit's chi-square over the median of its 250 K temperature bin | 7 spectra at 5 to 42 times their bin's median, 6 of them binaries with a second velocity component or a Gaia RUWE above 1.4 and one star with H-alpha filled in; none unexplained (`galah_worst_fits_nearby`) |
372
  | Gaia XP spectra the models fit worst | Gaia DR3: 118,030 stars within 100 pc with parallaxes at 10 sigma and a GSP-Phot fit; each log-posterior against its bin of 0.1 mag in BP-RP and 1 mag in G fitted with the same model library, the worst 0.1 per cent | 118 worst fits: 22 with a companion, 6 with emission lines, 2 blended and 69 at an extinction no star within 100 pc carries; 19 mid-M dwarfs fitted with MARCS remain, the far end of a tail of 149 beyond 5 widths among 34,969 such stars; PHOENIX fits of M dwarfs run far worse than MARCS fits and pile at [M/H] -0.8, so the bins are kept apart by library (`gaia_xp_worst_fits_nearby`) |
373
  | Herded stars, GALAH and ages | GALAH DR4 dwarfs within 100 pc with isochrone ages, GALAH radial velocities and Gaia DR3 astrometry: 2,895 with 3D velocity errors under 0.5 km/s and one velocity component | 482 pairs within 10 pc moving together within 1 km/s against 2.2 from velocity shuffles; of the 34 pairs both hotter than 5,600 K, where ages carry information, the age gaps run to a median of 1.6 Gyr and a largest of 4.9 Gyr, and none exceeds 5 Gyr (`galah_herded_ages`) |
374
- | Fireballs from outside the Solar System | the CNEOS fireball database through the JPL fireball API: 360 fireballs with a location and a pre-entry velocity vector, taken from Earth-fixed axes to barycentric axes with Earth's gravity removed and Earth's velocity added | 8 arrive faster than the Sun's escape speed at Earth's distance; redrawn with CNEOS's errors against ground-based networks (Peña-Asensio et al. 2025), the five before 2018 or at the threshold are bound in 2 to 48 per cent of the draws, among them IM1 (2014-01-08, 60.6 km/s heliocentric, bound in 2 per cent) and IM2 (2017-03-09, 21 per cent); three since 2018 are bound in none of 20,000, 2021-05-06 (43.7 km/s), 2022-07-28 (47.4 km/s, CNEOS-22) and 2026-04-01 (51.8 km/s), and are not explained (`cneos_hyperbolic_fireballs`) |
375
  | The temperate rocky-planet hosts in every band | NASA Exoplanet Archive composite table: the hosts within 100 pc of planets below 1.8 Earth radii (or 10 Earth masses) at 0.2-2 times Earth's insolation, against the other planet hosts within 100 pc weighted to the same temperatures and distances; eRASS1, GALEX AIS, VLASS and RACS-low by CDS XMatch inside each footprint, the radius widened by each star's motion over the survey's span | X-rays 6 of 11 against 4.7 (p 0.31); radio none of 24 in VLASS and none of 17 in RACS-low against 0.5 and 0.4; ultraviolet 5 of 29 against 11.7, a deficit (lower tail 0.007) from AIS fields that missed 13 of the 29 and from the quiet M dwarfs that radial-velocity searches choose; no band raises its detections at these hosts (`exoplanet_hz_hosts_bands`) |
376
  | Retrograde co-orbitals of the inner planets | JPL Small-Body Database: asteroids and comets within 5 per cent of the semi-major axis of Mercury, Venus, Earth or Mars with inclinations above 90 deg and eccentricities below 0.5 | none at any of the four (`sbdb_retrograde_coorbitals_inner`) |
377
  | Clusters missing their brightest stars | Hunt and Reffert (2023) open clusters at 100-1000 pc younger than 400 Myr with A_V below 1.5 and 300 or more members: 88 with 20 or more members at absolute G 4-6.5; their members at absolute G 0.5-2.5, late-B to F stars still on the main sequence, against the bright-to-faint ratio fitted in log age (0.32 at log age 7.5, 0.34 at 8.5) | no cluster short of bright stars beyond the 88 trials; the deepest, NGC 2301 with 29 against 48.7 (p 0.0016, corrected 0.14), Roslund 5 and NGC 1039, lie at the chance level (`hunt_reffert_missing_bright`) |
@@ -384,7 +384,7 @@ is its docstring, and its calls are in the recipes of `README.md`.
384
  | What sets the worst-fitted nearby M dwarfs apart | the 19 MARCS-fitted mid-M dwarfs among the Gaia XP worst fits with no companion, emission, blend or extinction behind them, against 3,000 stars of their colour and magnitude within 100 pc with ordinary fits | all 19 lie below the main sequence at fixed BP-RP and at fixed G-RP alike (1.5 robust widths against 0.0, p 5e-10; 0.36-1.0 mag, and 2.3 mag for one), with parallaxes three times as precise as their peers' (signal-to-noise 1,283 against 366, p 2e-10), at higher Galactic latitude (64 against 25 deg, p 2e-5), faster on the sky (45 against 31 km/s, p 0.08), redder in BP-G at fixed G-RP (p 0.012), with no excess radial-velocity scatter or GALEX detection (`gaia_xp_misfit_traits`) |
385
  | What a pile of unassociated gamma-ray sources is | the 4FGL-DR4 sources associated with pulsars, blazars and remnants or nebulae (3,946) train a random forest on power-law index, curvature and its significance, peak energy and variability; the clean unassociated sources within 2 deg of l 312.07, b 0 against those elsewhere within 5 deg of the plane; eRASS1 by CDS XMatch | 5 of the window's 7 classifiable: none pulsar-like against 25 per cent elsewhere, four uncurved and steady (variability indices 8-20) and the extended FGES J1409.1-6121 classed with remnants and nebulae; eRASS1 counterparts 1 of 7 against 4 of 135; extended emission around the Kookaburra and Rabbit nebulae rather than a pile of young pulsars (`fermi_unassociated_pile_classes`) |
386
  | Fireballs the meteor cameras caught | the 360 CNEOS fireballs with velocity vectors against the Global Meteor Network's trajectory summaries for 2018-2026, a camera trajectory beginning within 10 s and 300 km of the fireball's peak | none of the 360, the eight faster than the Sun's escape speed among them, has a camera trajectory; the network's cameras and the satellites' fireballs, mostly over the oceans, do not overlap (`cneos_gmn_trajectories`) |
387
- | Hosts of the hostless radio sources in the near infrared | the 22 hostless compact CRATES sources against VHS DR5, VIKING DR2 and UKIDSS LAS DR9 within 2 arcsec, coverage from any source within 1 arcmin, and the K-z relation of radio galaxies (Willott et al. 2003) | none has a near-infrared counterpart; the 15 the surveys cover are fainter than K 18.1-18.2, which on the K-z relation puts their hosts beyond redshift 1.5, and 7 lie outside the surveys (`crates_hostless_nir`) |
388
  | Spectral classes of the worst-fitted nearby M dwarfs | the 19 MARCS misfits of the trait test looked up in LAMOST DR5 and SDSS DR17 within 3 arcsec of their positions at those surveys' epochs | 4 have spectra, typed M2 and M3 by LAMOST's pipeline and M2V by SDSS's, neither of which carries a metallicity class; the subdwarf verdicts rest on the luminosity and J-Ks tests (`gaia_xp_misfit_spectra`) |
389
  | Gamma-ray points inside TeV glows | the 7 clean unassociated 4FGL-DR4 sources within 2 deg of l 312.07, b 0 against the H.E.S.S. Galactic Plane Survey's components (VizieR J/A+A/612/A1), inside when within twice a component's Gaussian width, against the 106 clean unassociated sources elsewhere in the survey's footprint | 1 of the 7, 4FGL J1417.7-6057, lies inside HESS J1418-609, against 17 of 106 elsewhere (Fisher p 0.71); the other 6 lie outside every TeV source, most 0.5-1.6 deg above the plane, so the TeV glows of the Kookaburra complex do not hold the pile (`fermi_unassociated_in_tev_glows`) |
390
  | Subdwarf indices of the worst-fitted nearby M dwarfs | the 19 MARCS misfits' LAMOST DR5 and SDSS DR17 spectra, put in air at rest and measured in the CaH2, CaH3 and TiO5 bands, and the zeta of Lepine et al. (2013); APOGEE DR17 holds none of the 19 | 4 measured: Gaia DR3 2470131113219840128, the one 2.3 mag below the main sequence, is a subdwarf (zeta 0.56); the other three, 0.5-0.8 mag below, are dwarfs of ordinary metallicity (zeta 1.01-1.12), so the faintness of most is not the subdwarfs' (`gaia_xp_misfit_subdwarf_indices`) |
@@ -403,6 +403,10 @@ is its docstring, and its calls are in the recipes of `README.md`.
403
  | Atmospheres of the rocky planets of red dwarfs | ESO Phase 3 (HARPS, ESPRESSO, NIRPS, CRIRES, UVES), the CADC (CFHT SPIRou) and KOA (Keck NIRSPEC): 1,611 spectra in or beside the transits of 42 of the 114 planets below 1.8 Earth radii of stars cooler than 4000 K within 50 pc, 13 planets with four or more spectra on each side of a transit, each night's out-of-transit median as the star; the 229 HARPS spectra of the Moon through the Venus transit of 2012 June 6 as the control | 27 planet-instrument-line tests and no planetary absorption: 3 sigma limits on He I 10830 in the planet's frame (the core mean, the reversed trail's residual folded in) of 0.12 per cent at GJ 486 b from 86 SPIRou in-transit spectra, below the 0.2 published from two of its transits, 0.16 and 0.30 at HD 260655 b and c, 0.50 and 0.57 at L 98-59 d and c, 0.75 at TOI-270 b, 2.1 at LP 791-18 d and 15.7 at TRAPPIST-1 b, the first helium limits for all but GJ 486 b and TRAPPIST-1 b; the M dwarfs' H alpha and Na D cores move by 1-13 per cent with the sky's sodium and the stars' flares, every excursion matched by the reversed trail; the Moon through the Venus transit shows a -2.9 per cent core residual in both lines from the night's airmass, matched by the reversed trail as well; a 0.5 per cent line injected in the planet's frame returns 0.12-0.20 in the core mean, 0.4 of a 4 km/s line's depth (`rocky_dwarfs_shoreline`) |
404
  | Planet-frame compositions of the giant planets | ESO Phase 3 and the CADC: the 48 HARPS and ESPRESSO transit sets of four or more in-transit spectra among the 945 giant planets brighter than V 11 (588 of their 800 hosts hold archived spectra), 2,463 in-transit spectra of 45 planets with the same nights' spectra beside them, and the SPIRou sets of WASP-76 b and HD 209458 b and the NIRPS sets of WASP-76 b and WASP-121 b; Kurucz's gfall lines for Fe I, Fe II, Ti I, V I, Cr I, Na I, Ca I, Mg I and K I, petitRADTRANS cross-sections for CO and water; SIMBAD's velocity where the archive lacks one | 47 planet-instrument sets searched and one species found: vanadium in WASP-121 b at 6.2 sigma on the orbit against a sham of 2.8 (Ben-Yami et al. 2020 found it at 4.5 from the same spectra), chromium there at 2.5 and in WASP-76 b at 3.1 under the threshold; a species resting on one line (Ca I, Mg I) or two (Na I, K I) is left to the line tests, since a deep stellar line's transit distortion sums along every trail; the shadow fit is bounded, kept to the optical atomic templates and given to the sham rows as well, since laid into the in-transit rows alone it sums to tens of sigma at rest; water in WASP-76 b at 4.7 sigma on the orbit from its 87 archived SPIRou in-transit spectra after three SysRem passes, the sham at 1.9 and the map's peak at K_p 50, so held under the rule (Hood et al. 2024 found it in one of those transits), CO there at 3.4; water in HD 209458 b's 13 SPIRou spectra at 3.9 with the map's peak off the orbit; HD 209458 b empty in the optical as published; sodium in WASP-69 b, a published detection, at 1.0 sigma in the cross-correlation, its two D lines left to the line tests; every other orbital value below 6 sigma or matched by the sham, the K dwarf HD 189733's own iron pattern reaching 5.4 against a sham of 6.4 and WASP-101 b's Fe II 5.7 with the map's peak at K_p 30, which the rule refuses; WASP-189 b, an A star rotating at 93 km/s, beyond the shadow model and flagged; the NIRPS sets of WASP-76 b and WASP-121 b, whose telluric residuals drive the sham maps to -12 and -90 sigma, marked not measured; a 0.5 per cent iron line injected into WASP-76 b adds 0.8 sigma; reflected starlight, the star's own spectrum as the template with the pattern and five principal components taken out of the rows and the gain measured by a 100 ppm copy laid into the same spectra: none from 51 Peg b at 43 ppm (3 sigma) from 300 HARPS and ESPRESSO spectra, the probe returned at 0.90, which places the contrast of 6e-5 claimed by Martins et al. 2015 at 4.2 sigma in the map, and tau Boo b's 299 campaign spectra near superior conjunction, where the components take 0.79 of the probe, at 546 ppm (`giants_planet_frame`) |
405
  | Companions of single-lined binaries along their known orbits | ESO Phase 3: the 37 EBLM binaries with Gaia DR3 single-lined orbits and archived HARPS series of 20 or more spectra above S/N 10, periods below 100 d covered three or more times, up to 300 spectra each spread over the span, and TOI-1338's 260 ESPRESSO spectra; Gaia DR3 non-single-star orbits and SB9 for the catalogue orbits; an M1 V template from GJ 367's archived HARPS spectra and a G0 V velocity template from J0310-31's own | four companions at 5 sigma or more on their own nulls, each summit at an offset of +1.0 km/s set against 10,000 draws of each null with a Gumbel law for the tail: TOI-1338's (ESPRESSO) at a false-alarm probability of 1e-11, J0310-31's at 8e-12, HD 4875's (J0050-18) at 1e-8 and J2101-45's at 4e-9, the last at 1.5e-7 (5.1 sigma) across the survey's 35 binaries; with the companion's systemic offset free, K2 of 77.27 +- 0.10 +- 0.15, 88.12 +- 0.18 +- 0.34 and 75.29 +- 0.30 +- 0.87 km/s (statistical, then systematic from the series' parts by date and its seasons) for the three with published values (77.16 +- 0.48, 88.27 +- 0.46 and 75.13 +- 0.16), masses within 0.6 per cent of the published dynamical ones and the companions' lines +1.05 to +1.25 km/s from the primary's systemic velocity, which held at zero moves K2 by up to 0.55 km/s; J2101-45 at K2 65.41 +- 0.32 +- 0.32 km/s with minimum masses of 1.415 and 0.552 Msun, held under 3 and 8 principal components, either half of the band and an L 98-59 template and recovered when injected into its spectra; J0649-27, J0825-67 and J1141-37 candidates at 3.9, 3.6 and 3.3 sigma alone and 3.0, 2.6 and 2.1 across the survey; TOI-1338's 73 HARPS spectra at 2.8 sigma and J1928-38's 74 at 0.3 at their published K2; J0543-57 and J2126-28 too thin to search (`binaries_eblm_known_orbits`) |
 
 
 
 
406
 
407
  ## Queued
408
 
@@ -538,7 +542,7 @@ Results about natural objects, instruments and catalogues that the searches prod
538
  |---|---|---|
539
  | (883607) 2016 TA56, a candidate dark comet on a Jupiter-family orbit: a transverse non-gravitational acceleration A2 of -3.45e-12 +- 0.37e-12 au/d^2 (9 sigma with the 2007 night as one position) on a body of 2.4 km and albedo 0.017, 15-39 times all absorbed sunlight at 1000 kg/m^3; the two orbits part by 4-7 arcsec in 2030 August-September | `darkcomet_2016_ta56` | papers/dark_comet |
540
  | 2016 YB13, a transient retrograde co-orbital of Jupiter not in the literature: inclination 140 deg, eccentricity 0.41, semi-major axis 5.46 au on a 642-day arc with a formal eccentricity error of 2e-6; the nominal orbit and fifty clones of its covariance integrated with the four giant planets (hybrid integrator, step 0.05 yr) hold Jupiter's semi-major axis without an approach inside 0.5 au for 7 kyr each way from the nominal orbit, for a median of 3 kyr forward (10th to 90th percentile 1-27 kyr) and 13 kyr backward (6-31 kyr) over the clones, with 2 of 50 still held at -100 kyr and none at +100 kyr, while the control (514107) Ka'epaoka'awela holds for the whole 100 kyr each way and never comes within 0.7 au; a Jupiter-crosser of that eccentricity outside the resonance meets the planet within a few kyr; the resonant angle was not established under the conventions tried | `sbdb_retrograde_coorbitals` | a transient member of the resonance on a 10 kyr timescale, which the published cases of such capture explain; a dynamics note would need the angle and the capture history |
541
- | PSR J1420-6048's glitch schedule has lapsed: the eight glitches of the Jodrell Bank table from MJD 51600 to 58555 come at intervals of 994 +- 196 days, a scatter random intervals give once in four thousand draws, and the published intervals of two to three years agree; the schedule put the ninth glitch at MJD 59549 +- 196, and the table, complete to MJD 60980, lists none, a gap of 2425 days, nearly twice the longest before it | `jbo_glitch_schedules` | the vet stands as a young pulsar of Vela's kind; the next glitch, when it comes, dates the lapse |
542
  | Ma et al. (2023)'s eight Breakthrough Listen signals of interest: MLc2-MLc8 lie on their own lines in their cadences' OFF scans and MLc3-MLc8 in other stars' pointings; MLc8 is one terrestrial carrier rising 1.72 kHz over four hours through four other stars' cadences; the published table's drift signs run opposite to df/dt and its MJD column holds GUPPI scan labels | `bl_soi` | papers/ml_signals |
543
  | HD 31435's 5.48 per cent polarisation (Moneti et al. 1984) belongs to another star: the star's photometry, astrometry, spectrum and infrared allow no polariser, and the field behind the cloud gives the measured angle | `intrinsic_polarisation` | papers/hd31435 |
544
  | KIC 2557430 (KOI-6277): the published surface temperatures run too hot; Gaia resolves WDS J19074+3749AB into the eclipsing pair at 6130 K and a co-moving K star whose luminosities sum to the light observed | `debs_missing_flux` | papers/kic2557430 |
@@ -556,8 +560,8 @@ Results about natural objects, instruments and catalogues that the searches prod
556
  | Gaia DR2 holds no source for Lalande 21185 and three other stars within 100 pc at G below 17 moving faster than 585 mas/yr, nor for 90 stars 2-7 arcsec from a star 1-11 mag brighter, all of which DR3 catalogues; DR3 in turn holds iota Leo B (G 6.8, 2.1 arcsec from iota Leo) and chi Eri B (G 9.7, 2.5 arcsec from chi Eri) as no source of their own, both catalogued by DR2 | `gaia_dr3_appeared`, `gaia_dr2_vanished` | catalogue property |
557
  | GALAH DR4 lithium of cool dwarfs: 18 of the 135 dwarfs below 5300 K listed with a clean A(Li) above 2.0 and isochrone ages above 6 Gyr show no Li I 6708 line in their own spectra where the catalogue gives 113-600 mA, a line the refit recovers in 134 of 135 injections at the same S/N; the highest, Gaia DR3 3910691559800909568, listed at A(Li) 3.69 (401 mA), measures 17 +- 28 mA; the 95 real lines belong to young stars and binaries whose isochrone ages are wrong | `galah_lithium_old_dwarfs` | catalogue corrections |
558
  | HERMES camera I records round spots of 1.5-1.7 million electrons, the charge 5.3-6.2 MeV releases in silicon (the energies of alpha particles), about 4 px across like light through the spectrograph; in an observation of one exposure GALAH DR4 passes one into a spectrum as an emission line 21 times the continuum (Gaia DR3 609133088216624000, 7790.24 A rest, 2017 January 2, fibre 47), the spot 2.2 px from the fibre's trace, where the arc lines fall within 0.6 px | `laser_galah` | instrument artefact |
559
- | CNEOS fireballs since 2018 faster than the Sun lets anything bound move: 2026-04-01 02:13:14 UTC over the South Atlantic (41.9 S, 54.7 W, 90.5 km), 69.2 km/s at entry and 51.8 km/s heliocentric against the 42.1 km/s escape speed; 2022-07-28 01:36:07 UTC (CNEOS-22 of Cloete and Loeb 2026), 47.4 against 41.8 km/s; 2021-05-06 05:54:26 UTC, 43.7 against 41.9 km/s; none bound in 20,000 draws within the post-2018 errors Peña-Asensio et al. (2025) measured against ground-based networks; the 2026 event is not in the published candidate lists, and CNEOS-25 (2025-02-12), listed as hyperbolic by Cloete and Loeb, is bound at 37.4 km/s from the database's present entry; the GOES lightning mappers saw both that fell in their view, 2026-04-01 from GOES-19 0.7 s and 144 km from the CNEOS fix for 1.1 s, and 2022-07-28 from GOES-16 and GOES-17, whose triangulated trail runs at 18.4 km/s from 42 to 33 km, 0.61 of the CNEOS speed, where the mappers' trail speeds on 16 slower fireballs run at 0.66-1.65 of CNEOS's; no Global Meteor Network camera recorded any of the 360 CNEOS fireballs | `cneos_hyperbolic_fireballs`, `cneos_glm_bolides`, `cneos_gmn_trajectories` | the sightings fix both events' times and places; the mappers' trail speeds scatter too widely to test a 21 per cent excess and no camera network saw them, so an infrasound or seismometer record would settle a speed |
560
- | 22 compact radio sources of 65-890 mJy at 4.8 GHz, more than 30 deg from the Galactic plane, with nothing in AllWISE, CatWISE2020, unWISE, Pan-STARRS1 or the Legacy Surveys DR10 within 2-3 arcsec of positions VLASS confirms, so above 5,000 in radio-to-infrared flux ratio, beyond the infrared-faint radio sources; 17 are VLBI-compact, and their spectra are peaked or steep more often and flat less often than hosted sources' (8 of 22 flat against 124 of 200), the signature of young compact radio galaxies rather than beamed quasars; none shows in VHS, VIKING or UKIDSS, the 15 those cover fainter than K 18.1, beyond redshift 1.5 on the K-z relation of radio galaxies | `crates_hostless_flat_spectrum`, `crates_hostless_seds`, `crates_hostless_nir` | a sample of candidate young radio galaxies beyond redshift 1.5; K-band imaging deeper than 20 or a radio redshift from HI or OH absorption would place them |
561
  | Nearby M dwarfs too faint for their colour: 18 mid-M dwarfs at 30-53 pc, G 13-16, lie 0.36-1.0 mag below the main sequence at fixed G-RP, with parallaxes measured to 0.1 per cent, concentrated at high Galactic latitude (median 64 deg against 25) and moving faster than their peers (median 45 km/s, two at 119 and 132), with no companion, activity or ultraviolet sign; the three with spectra show the CaH and TiO bands of ordinary metallicity (zeta 1.01-1.12), while the one further 2.3 mag below is a subdwarf (zeta 0.56); Gaia's GSP-Phot fits them worst of all nearby M dwarfs | `gaia_xp_worst_fits_nearby`, `gaia_xp_misfit_traits`, `gaia_xp_misfit_spectra`, `gaia_xp_misfit_subdwarf_indices` | open: mildly metal-poor old disc stars above the subdwarf threshold would sit this low, which a metallicity from new spectra of the other 15 would test; at ordinary metallicity, 30-60 per cent too little light for their colour has no explanation in hand |
562
  | The densest pile of clean unassociated Fermi-LAT sources in the inner plane, 7 within 2 deg of l 312.1 deg (the Galactic bar's L5 line of sight and the Crux-Centaurus tangent) against a mean of 1.3, sits around the Kookaburra and Rabbit nebulae: a random forest trained on 3,946 associated sources classes none of its 5 measurable members as a pulsar, against a quarter of the plane's other unassociated sources; four are steady uncurved power laws and the fifth is the extended FGES J1409.1-6121; only 1 of the 7 lies inside a H.E.S.S. source, HESS J1418-609, the plane's own rate, and the rest sit outside every TeV glow, most 0.5-1.6 deg above the plane; they sit on more dust than their latitudes' share (median rank 0.69, p 0.038) | `fermi_bar_lagrange_points`, `fermi_unassociated_pile_classes`, `fermi_unassociated_in_tev_glows`, `fermi_pile_dust` | not pulsars and not inside the TeV-bright nebulae; unexplained, and a dedicated LAT fit of the region with the gas maps would say whether they are emission the diffuse model misses |
563
  | EBLM J2101-45's M-dwarf companion, measured for the first time, from 75 archived HARPS spectra over 2298 d: K2 65.41 +- 0.32 +- 0.32 km/s (statistical, then systematic from its eight seasons) at false-alarm probabilities of 4.3e-9 (5.8 sigma) on its own nulls and 1.5e-7 (5.1 sigma) across the survey's 35 binaries, the five variants of the analysis giving 65.26-65.91 km/s and a companion injected at a flux ratio of 1e-3 recovered at 65.61 km/s; minimum masses of 1.415 +- 0.024 and 0.552 +- 0.006 Msun, within 0.7 per cent of the masses themselves since the binary eclipses and its primary's Gaia DR3 radius of 2.67 Rsun then needs sin^3 i above 0.993, against the model-based 1.29 +- 0.10 and 0.523 +- 0.043 Msun of Triaud et al. (2017); HD 4875's companion, measured before only in the near-infrared, is detected in the optical, and the companions of J0649-27, J0825-67 and J1141-37 remain candidates at 2.1-3.0 sigma across the survey | `binaries_eblm_known_orbits` | papers/double_lined |
 
223
  | Unique variables next door | GCVS stars of the unique type; Gaia DR3 by CDS XMatch; SIMBAD | 13 of 93 within 100 pc, every one of a natural kind: five L dwarfs whose clouds turn with them, four magnetic white dwarfs carrying spots round (GD 356 among them, with its emission lines), the AM CVn binary GP Com, the gamma Doradus pulsator V2118 Oph, the spotted binary AS Dra, and UU CrB, whose one event is the 1980 superflare Schaefer, King & Deliyannis (2000) list on an ordinary F8 dwarf (`gcvs_unique_near`) |
224
  | Gamma rays from cold white dwarfs | Gentile Fusillo et al. (2021): 12007 white dwarfs within 100 pc below 8000 K; Fermi-LAT 4FGL-DR4 | 28 inside an unassociated 95 per cent ellipse against 22-54 (mean 36.4) moved 1 deg; 39 more inside ellipses the catalogue gives to blazars, radio galaxies, pulsars, supernova remnants and the binary V918 Sco (`fermi_cold_white_dwarfs`) |
225
  | Hard X-rays from the nearest stars | Gaia Catalogue of Nearby Stars: 2575 objects within 20 pc; Swift-BAT 105-month and 150-month catalogues (14-195 keV) | 0 inside a BAT error circle against 0-6 (mean 2.5) moved 1 deg; none of BAT's 13 catalogued stars lies within 20 pc (`bat_nearest_stars`) |
226
+ | Warm stars in Earth's transit zone | Gaia Catalogue of Nearby Stars with its WISE photometry; SIMBAD | 0 warm of 911 stars in the zone against 2.31 expected from the 35 of 13800 stars 1-5 deg away (p 1), with every colour taken from AllWISE's plain W1: the proper-motion-fitted W1 of the Catalogue of Nearby Stars runs 0.3-1.1 mag faint for bright and fast stars and made 2712 stars look warm (`etz_warm_stars`) |
227
  | Radio from Earth's transit zone | Gaia Catalogue of Nearby Stars north of -40 deg; VLASS epoch-1 components by CDS XMatch | 0 of 1502 zone stars with a 3 GHz source within 3 arcsec, against 0.74 from the 11 of 22386 stars 1-5 deg away and a mean of 0.5 with the zone moved 2 arcmin (`etz_vlass_stars`) |
228
  | Light at 4.6 um alone | Gaia Catalogue of Nearby Stars with its WISE photometry: 49753 stars at BP-RP 0.5-2.5 with W1, W2 and W3 measured; AllWISE flags; SIMBAD | 7 stars five widths above the W1-W2 locus with W1-W3 on it, against 7 as far below; 4 carry AllWISE contamination or extended-source flags, and the 3 left, K and M dwarfs 0.1 mag above the locus, are as common as the deficits (`w2_only_excess`) |
229
  | Glitches firing together | Jodrell Bank glitch catalogue (Basu et al. 2022): 285 glitches in 107 pulsars timed to 2 days or better | 13 pairs in different pulsars within their epoch uncertainties against a mean of 8.8 (95th percentile 14) with each pulsar's glitches moved 100-2000 days, as many or more in 0.11 of draws (`glitch_coincidences`) |
 
259
  | Planets on perfect circles | NASA Exoplanet Archive composite table: 1014 planets with periods beyond 30 d and a measured eccentricity (635 more fixed or limits), those whose upper eccentricity lies below 0.002 | none; the lowest percentile of upper eccentricities sits at 0.018 |
260
  | Asteroid spins on the clock | LCDB frequency-diameter table: 4172 secure rotation periods (U 3) quoted to three decimals between 2 and 48 h, those within 0.02 per cent of a whole number of hours against the half-hour windows and uniform fractions, the day's harmonics counted apart | 11 at whole hours against 12.8 expected and 12 at half-hours (Poisson p 0.73), 1 of them at a harmonic of the day |
261
  | Planets on whole days | NASA Exoplanet Archive composite table: 1494 planets with periods of 1.5-400 d known to better than 0.00002 d, those within 0.00002 d of a whole number of days against the half-day windows and uniform fractions | none, against 0.06 expected; none at half-days |
262
+ | Light at 12 um alone | Gaia Catalogue of Nearby Stars with its WISE photometry: 3510 stars within 100 pc at BP-RP 0.5-2.5 with W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, W1-W3 more than five widths and five errors above the single-star locus at their colour with W1-W4 within two widths of its own, against the stars as far below; each read in AllWISE for flags and faint W3, in Gaia for a second source in the W3 beam and for a W4 excess at three errors | 27 above against 2 below, all artefacts: 6 carry AllWISE flags and the rest lose their excess with AllWISE's plain W1, the catalogue's proper-motion-fitted W1 being 0.3-0.5 mag faint for these K and M dwarfs moving 0.4-1.0 arcsec a year (`w3_only_excess`) |
263
  | Symmetric flares | Yang et al. (2023) TESS flare catalogue: 24232 of 60810 flares lasting 40 minutes or more, those whose rise from start to peak takes as long as the decay within 10 per cent of the duration, or longer, read by duration and by the star's flare count | 1034 symmetric and 4482 rising longer than decaying, a share that holds at every duration and on quiet and busy stars alike, so the catalogue's event boundaries set the shapes and no single flare's shape can be read from it |
264
  | Pulsars ticking in whole hertz | ATNF pulsar catalogue: 2118 of 2527 pulsars with periods quoted to eight digits or more, spin frequencies within 0.00001 Hz of a whole hertz or periods within 0.00001 ms of a whole millisecond, against the half-integer windows and uniform fractions; periods rounded to fewer digits counted apart | none against 0.085 expected, none at half-integers; 54 periods quoted to two to four digits land on the millisecond grid by rounding alone |
265
  | Pulsars on the hydrogen line's decimals | ATNF pulsar catalogue: 2118 pulsars with periods quoted to eight digits or more, spin frequencies within one part in 100,000 of 1420.405751 Hz scaled by a power of ten, against the windows shifted by half a decade and uniform logarithmic fractions | none against 0.018 expected, none at the half-decade shift |
 
277
  | Transits longer than the star allows | NASA Exoplanet Archive composite table: 4328 transiting planets with a duration, period, semi-major axis and radii, those whose duration exceeds by a quarter the longest central transit a circular orbit allows at the catalogued geometry, each read for its duration error, the sources of its duration and stellar radius and its eccentricity | 188: 167 carry a stellar radius of the Kepler Input Catalogue era or a duration and a radius from different solutions, 8 have loose or missing duration errors, 7 are eccentric, 4 have eccentricities fixed without errors and WASP-132 b's duration stands off by itself; TOI-1295 b's 6.20 h, 1.38 times the maximum in one solution, stands against the TOI table's measured 3.75 h, 0.84 of it; none unexplained |
278
  | Gamma rays peaked like a line | Fermi-LAT 4FGL (HEASARC): 2766 sources above 10 sigma with a log-parabola curvature, those with beta above 0.8 at a curvature significance above 4, a spectrum peaked within a factor of a few in energy, against the catalogue's curvatures (median 0.10, 99th percentile 0.64); each read for its class and analysis flags | 3, all of known classes: the pulsars J1827-1446 and J1057-5851 and the globular cluster Terzan 1, whose cutoff spectra the log parabola bends to fit |
279
  | Nearby stars flickering by the minute | Gaia DR3 short-timescale variables within 100 pc: 909 stars, those whose characteristic frequency exceeds 48 cycles a day (the catalogue reaches 72), each read for its white-dwarf locus, its SIMBAD type, its image and RUWE flags and its colour, since a red dwarf the pipeline picks up flares and its variogram timescale is the flares' rise | 220: 35 white dwarfs and compact stars, 67 of other known types, 108 flaring red dwarfs; the 10 left are Gaia's: the table's frequencies pile up at 38-41, 51-55 and 66-69 cycles a day, where six of the 10 sit, five are catalogued rotators, an eclipsing binary or delta Scuti stars, and TESS two-minute light curves of four hold 3-13 ppm at Gaia's frequencies against its 13,000-27,000; none unexplained |
280
+ | Infrared dimming next door | Gaia Catalogue of Nearby Stars within 20 pc with AllWISE W1 8-15: 1004 stars matched to AllWISE at 2010.5 and CatWISE2020 at 2015.0 within 3 arcsec, those whose profile W1 differs by more than 0.3 mag between the two means, against the stars that brightened as much; each read for Gaia's variability flag, RUWE and image flags, SIMBAD's type, the WISE flags, CatWISE's saturation brighter than 8.5 mag, the match separation and the proper motion, since a star moving a second a year is split between the epochs of CatWISE's coadds | 92 fainter in CatWISE against 2 brighter: 14 variables, 29 blends, 35 saturated or flagged, 16 matched to another source or split by their motion; the 6 M6-L3 dwarfs moving 0.4-0.9 arcsec a year hold their AllWISE W1 within 0.15 mag across NEOWISE's single exposures of 2014-2024, so CatWISE's proper-motion fit, not the stars, is faint (`allwise_catwise_w1_change`) |
281
  | Systems turned face-on to us | NASA Exoplanet Archive composite table: 302 non-transiting planets with a measured inclination, those within 5 deg of face-on from either pole against the 0.4 per cent of random orientations, each read for its inclination error and method | 1 against 1.15 expected (binomial p 0.68): HD 204313 e, an astrometric orbit at 4 deg from the pole |
282
  | Masers at rest in the universe's frame | Pestalozzi et al. (2005) 6.7 GHz methanol masers: 519 peak velocities taken from the kinematic local standard of rest to the Sun and to the cosmic microwave background's frame, those within 2 km/s of rest there against the velocities' own density within 30 km/s of rest | 8 against 7.7 expected (Poisson p 0.50) |
283
  | Waste heat in HI-dark galaxies | Leisman et al. (2017) ALFALFA HI sources with low-surface-brightness counterparts: 115 positions matched to AllWISE within 10 arcsec, a source at 5 sigma in W3 or W4 against the positions moved 2 arcmin in eight directions scaled by the warm share of the matches, each read for an AGN colour and a Gaia star | 1 against 0.5 expected (p 0.37), AGC 188768 with an AGN's W1-W2 colour |
 
320
  | Stars that jumped between 2MASS and Gaia | Gaia DR3 stars within 25 pc with a 2MASS counterpart: 4915, the Gaia position carried to the 2MASS night with the proper motion and that night's parallactic shift, against the 2MASS position | offsets of 0.10 arcsec median and 0.90 at the 99th percentile; 32 above 1 arcsec, 29 saturated, poor or flagged in 2MASS or Gaia and 3 blended with a second Gaia source in the 2MASS beam; none unexplained (`gaia_2mass_jumped`) |
321
  | Lurkers at Jupiter's far Lagrange point | JPL Small-Body Database: 16412 bodies within 0.35 au of Jupiter's semi-major axis with e below 0.3, their mean longitudes at the element epoch against Jupiter's, the count within 20 deg of the L3 point opposite the planet | 4 at L3 against 9414 and 5374 in the L4 and L5 swarms: 2 on arcs of days, 2 Trojans librating widely (2015 OL106 at 162 deg and 2020 BZ43 at 199 deg); none unexplained (`sbdb_jupiter_l3`) |
322
  | Waste heat at room temperature | Gaia Catalogue of Nearby Stars: 16037 stars at BP-RP 0.5-2.5 with clean Ks, W3 and W4, 175 with excess at both 12 and 22 um and 30 of them unflagged in AllWISE with a colour temperature from the excess flux ratio | 3 between 280 and 320 K against 1.5 in the bins beside (Poisson p 0.19); the excesses run from 100 to 320 K with none hotter; at the chance rate (`gcns_room_temperature_excess`) |
323
+ | Warm stars in Jupiter's transit zone | Gaia Catalogue of Nearby Stars with its WISE photometry: 175 stars with W1 and W3 or W4 within 0.051 deg of Jupiter's orbital plane, the band that sees Jupiter transit the Sun, against the 13736 stars 1-5 deg from the plane; SIMBAD | 1 warm, a G 14.9 star with a W4 excess, against 0.41 expected from the band's share (p 0.34), with every colour taken from AllWISE's plain W1; with the ultraviolet count of the zone's stars this closes the Jupiter-zone programme (`jupiter_zone_warm_stars`) |
324
  | Two pulsars at one spot | ATNF pulsar catalogue (VizieR B/psr): 2358 pulsars outside globular clusters and the Magellanic Clouds, pairs within 2 arcmin, against the pairs the mirrored declinations give | 7 pairs against 7 mirrored: the double pulsar J0737-3039A and B bound to each other, the six others at different dispersion measures; none unexplained (`atnf_pulsars_one_spot`) |
325
  | Glitches on a schedule | Jodrell Bank glitch table: 34 pulsars with five or more dated glitches, the scatter of their glitch intervals as a fraction of the mean against 4000 draws of exponential intervals | 4 regular, J1420-6048 (scatter 0.20 of the mean, p below 2.5e-4), J2021+3651, J1023-5746 and J1709-4429 (0.27-0.29), every one a young pulsar of large Vela-like glitches, which recur at the crust's critical lag; none unexplained (`jbo_glitch_schedules`) |
326
  | Warm stars in the nearest clusters | Hunt and Reffert (2023): the 58 clusters and moving groups within 250 pc with 100 or more members, each member at BP-RP 0.5-2.5 matched to AllWISE, the share with W1-W3 five widths above the cluster's own locus against the field's 0.77 per cent, judged over the 58 | no cluster beyond chance over the 58; 23 warm stars, 13 flagged in AllWISE, 6 of known types; the highest shares in the clusters of 5-10 Myr (HSC 2986, OCSN 96, HSC 2907 at 5-6 per cent) and the Pleiades at 2.3 per cent; none unexplained (`clusters_warm_stars`) |
 
342
  | Stars that changed colour since Hipparcos | Hipparcos new reduction and Gaia DR3: 77746 stars with a B-V measured to 0.03 mag and a BP-RP, those five robust widths, five times the carried B-V error and 0.2 mag off the run of BP-RP with B-V; Hipparcos scatter, RUWE, Gaia's excess, SIMBAD's types and spectral classes | 1527 off the run: 386 saturated or with BP/RP excess, 538 variable, 135 binaries, 26 whose spectral class sides with Gaia against the Hipparcos B-V; 442 remain, stars whose Hipparcos B-V, compiled from ground photometry, is the only old colour and cannot be checked against a second (`hipparcos_gaia_colour_change`) |
343
  | Eclipsing binaries on whole days | Kepler eclipsing binary catalogue (Prsa et al. 2011, VizieR J/AJ/141/83): 1242 systems with periods between 0.5 and 50 d measured from space, those within 0.0002 d of a whole number of days against the periods' own density and the half-day windows | none against 0.5 expected; 2 at half-days (`kepler_eb_whole_days`) |
344
  | Retrograde co-orbitals of the giant planets | JPL Small-Body Database: bodies within 5 per cent of Jupiter's, Saturn's, Uranus's or Neptune's semi-major axis with inclination above 90 deg and eccentricity below 0.5 | 3, all at Jupiter: the published co-orbital (514107) Ka'epaoka'awela, 2007 VW266 published in the neighbouring 13/-14 resonance, and 2016 YB13, which fifty clones of its orbit hold in the resonance for thousands of years each way, a transient member; none unexplained (`sbdb_retrograde_coorbitals`) |
345
+ | Radio sources that switched off | NVSS (VizieR VIII/65): 37223 compact sources above 100 mJy north of -40 deg and more than 10 deg from the Galactic plane, those without a VLASS epoch-1 quick-look component (J/ApJS/255/30) within 20 arcsec; SIMBAD, the artefact zones of sources above 5 Jy, RACS-low of 2019-2020 and the component list's own holes; then RACS-mid, RACS-high, RACS-low3 and LoTSS DR2 within 30 arcsec, RACS-mid and TGSS within 90 arcsec for the lobes of brighter sources, and the VLASS quick-look images at the CADC | 281 missing, all explained: 132 of known types, 12 beside sources above 5 Jy, 130 still shining in a later survey, in the component list's holes or above 10 sigma in the VLASS images themselves (the four north of +70 deg at 75-223 mJy across all three epochs), and 7 hotspots of bright doubles such as 3C 192, 3C 263 and 3C 382, catalogued 54-80 arcsec away as one source (`nvss_vlass_switchoffs`) |
346
+ | Bodies pushed out of their orbital planes | JPL Small-Body Database: 113 comets and 10 asteroids with normal and radial non-gravitational terms, those whose normal term at 3 sigma exceeds half the radial; the ratio's distribution has a median of 0.19 and a 90th percentile of 0.86 | 28: 21 comets, whose polar jets push across the plane, 5 on arcs under 1000 d; the two near-Earth asteroids 2016 GW221 and 2013 XY20 are dark comets of Seligman et al. (2024); refitted in ASSIST, 2016 GW221 keeps A3 +3.4e-11 au/d^2 at 8.1 sigma with site weights and 3.9 sigma with each night as one position once JPL's Arecibo delay of 2019 is fitted to 0.1 us, at 4.7 sigma or more with any apparition left out, while 2013 XY20's A3 of 4.3 sigma with site weights falls to 2.5 with nights and vanishes without its 2019 apparition; none unexplained (`sbdb_out_of_plane`, `darkcomet_normal_2016_gw221`, `darkcomet_normal_2013_xy20`) |
347
  | Gamma rays harder than any shock | Fermi-LAT 4FGL-DR4 (HEASARC fermilpsc): 2766 sources above 10 sigma with a power-law index, those with an index below 1.3 at its upper error | none (`fermi_hard_spectra`) |
348
  | Stars whose distance changed since Hipparcos | Hipparcos new reduction and Gaia DR3: 98004 stars with both parallaxes, the differences in combined sigmas scaled by the sample's scatter of 1.24, those apart by 5 scaled sigma and 2 mas; the match's brightness, RUWE, Gaia's flags, Hipparcos's goodness of fit, SIMBAD and the Gaussian tail | 43: 3 matched to a Gaia source two magnitudes too faint, 27 binaries, 12 saturated or with poor solutions, 1 within the Gaussian tail (p 0.055); none unexplained (`hipparcos_gaia_parallax_change`) |
349
  | Lithium above the meteoritic | GALAH DR4 (Data Central): 124623 dwarfs with a clean fit and a clean lithium abundance to 0.15 dex at S/N above 40, those with A(Li) above 4.3 at the lower bound, a dex above the meteoritic and beyond what engulfing a giant planet adds; the stars between 3.6 and 4.3 counted as within engulfment's reach | 1 above 4.3, a 6600 K star where the line blends; 11 between 3.6 and 4.3; none unexplained (`galah_lithium_meteoritic`) |
 
371
  | Spectra no stellar model fits | GALAH DR4: 1,379 dwarfs within 100 pc at red-arm S/N above 100; the worst 0.5 per cent of the spectral fit's chi-square over the median of its 250 K temperature bin | 7 spectra at 5 to 42 times their bin's median, 6 of them binaries with a second velocity component or a Gaia RUWE above 1.4 and one star with H-alpha filled in; none unexplained (`galah_worst_fits_nearby`) |
372
  | Gaia XP spectra the models fit worst | Gaia DR3: 118,030 stars within 100 pc with parallaxes at 10 sigma and a GSP-Phot fit; each log-posterior against its bin of 0.1 mag in BP-RP and 1 mag in G fitted with the same model library, the worst 0.1 per cent | 118 worst fits: 22 with a companion, 6 with emission lines, 2 blended and 69 at an extinction no star within 100 pc carries; 19 mid-M dwarfs fitted with MARCS remain, the far end of a tail of 149 beyond 5 widths among 34,969 such stars; PHOENIX fits of M dwarfs run far worse than MARCS fits and pile at [M/H] -0.8, so the bins are kept apart by library (`gaia_xp_worst_fits_nearby`) |
373
  | Herded stars, GALAH and ages | GALAH DR4 dwarfs within 100 pc with isochrone ages, GALAH radial velocities and Gaia DR3 astrometry: 2,895 with 3D velocity errors under 0.5 km/s and one velocity component | 482 pairs within 10 pc moving together within 1 km/s against 2.2 from velocity shuffles; of the 34 pairs both hotter than 5,600 K, where ages carry information, the age gaps run to a median of 1.6 Gyr and a largest of 4.9 Gyr, and none exceeds 5 Gyr (`galah_herded_ages`) |
374
+ | Fireballs from outside the Solar System | the CNEOS fireball database through the JPL fireball API: 360 fireballs with a location and a pre-entry velocity vector, taken from Earth-fixed axes to barycentric axes with Earth's gravity removed and Earth's velocity added | 8 arrive faster than the Sun's escape speed at Earth's distance; redrawn with CNEOS's errors against ground-based networks (Peña-Asensio et al. 2025), the five before 2018 or at the threshold are bound in 2 to 48 per cent of the draws, among them IM1 (2014-01-08, 60.6 km/s heliocentric, bound in 2 per cent) and IM2 (2017-03-09, 21 per cent); 2026-04-01, 51.8 km/s heliocentric from CNEOS and the Polar-IM of Cloete and Loeb (2026), is 41.5 and 41.1 km/s on the two velocities Silber et al. (2026) triangulate from GOES-East's lightning mapper and MTG-I1's lightning imager, 18 per cent slower, below the 42.1 km/s escape speed and hyperbolic in 35 per cent of draws within their errors; 2021-05-06 (43.7 km/s) and 2022-07-28 (47.4 km/s, CNEOS-22) are bound in none of 20,000 and are not explained (`cneos_hyperbolic_fireballs`) |
375
  | The temperate rocky-planet hosts in every band | NASA Exoplanet Archive composite table: the hosts within 100 pc of planets below 1.8 Earth radii (or 10 Earth masses) at 0.2-2 times Earth's insolation, against the other planet hosts within 100 pc weighted to the same temperatures and distances; eRASS1, GALEX AIS, VLASS and RACS-low by CDS XMatch inside each footprint, the radius widened by each star's motion over the survey's span | X-rays 6 of 11 against 4.7 (p 0.31); radio none of 24 in VLASS and none of 17 in RACS-low against 0.5 and 0.4; ultraviolet 5 of 29 against 11.7, a deficit (lower tail 0.007) from AIS fields that missed 13 of the 29 and from the quiet M dwarfs that radial-velocity searches choose; no band raises its detections at these hosts (`exoplanet_hz_hosts_bands`) |
376
  | Retrograde co-orbitals of the inner planets | JPL Small-Body Database: asteroids and comets within 5 per cent of the semi-major axis of Mercury, Venus, Earth or Mars with inclinations above 90 deg and eccentricities below 0.5 | none at any of the four (`sbdb_retrograde_coorbitals_inner`) |
377
  | Clusters missing their brightest stars | Hunt and Reffert (2023) open clusters at 100-1000 pc younger than 400 Myr with A_V below 1.5 and 300 or more members: 88 with 20 or more members at absolute G 4-6.5; their members at absolute G 0.5-2.5, late-B to F stars still on the main sequence, against the bright-to-faint ratio fitted in log age (0.32 at log age 7.5, 0.34 at 8.5) | no cluster short of bright stars beyond the 88 trials; the deepest, NGC 2301 with 29 against 48.7 (p 0.0016, corrected 0.14), Roslund 5 and NGC 1039, lie at the chance level (`hunt_reffert_missing_bright`) |
 
384
  | What sets the worst-fitted nearby M dwarfs apart | the 19 MARCS-fitted mid-M dwarfs among the Gaia XP worst fits with no companion, emission, blend or extinction behind them, against 3,000 stars of their colour and magnitude within 100 pc with ordinary fits | all 19 lie below the main sequence at fixed BP-RP and at fixed G-RP alike (1.5 robust widths against 0.0, p 5e-10; 0.36-1.0 mag, and 2.3 mag for one), with parallaxes three times as precise as their peers' (signal-to-noise 1,283 against 366, p 2e-10), at higher Galactic latitude (64 against 25 deg, p 2e-5), faster on the sky (45 against 31 km/s, p 0.08), redder in BP-G at fixed G-RP (p 0.012), with no excess radial-velocity scatter or GALEX detection (`gaia_xp_misfit_traits`) |
385
  | What a pile of unassociated gamma-ray sources is | the 4FGL-DR4 sources associated with pulsars, blazars and remnants or nebulae (3,946) train a random forest on power-law index, curvature and its significance, peak energy and variability; the clean unassociated sources within 2 deg of l 312.07, b 0 against those elsewhere within 5 deg of the plane; eRASS1 by CDS XMatch | 5 of the window's 7 classifiable: none pulsar-like against 25 per cent elsewhere, four uncurved and steady (variability indices 8-20) and the extended FGES J1409.1-6121 classed with remnants and nebulae; eRASS1 counterparts 1 of 7 against 4 of 135; extended emission around the Kookaburra and Rabbit nebulae rather than a pile of young pulsars (`fermi_unassociated_pile_classes`) |
386
  | Fireballs the meteor cameras caught | the 360 CNEOS fireballs with velocity vectors against the Global Meteor Network's trajectory summaries for 2018-2026, a camera trajectory beginning within 10 s and 300 km of the fireball's peak | none of the 360, the eight faster than the Sun's escape speed among them, has a camera trajectory; the network's cameras and the satellites' fireballs, mostly over the oceans, do not overlap (`cneos_gmn_trajectories`) |
387
+ | Hosts of the hostless radio sources in the near infrared | the 22 hostless compact CRATES sources against VHS DR5, VIKING DR2 and UKIDSS LAS DR9 within 2 arcsec, coverage from any source within 1 arcmin, and the K-z relation of radio galaxies (Willott et al. 2003) | none has a near-infrared counterpart; the 15 the surveys cover are fainter than K 18.1-18.2, which on the K-z relation puts their hosts beyond redshift 1.5, and 7 lie outside the surveys; HSC-SSP DR3 covers J000744+022626 and J231637+015200 and holds nothing within an arcsecond at S/N 4 or more in g, r or z, to about r 26 (`crates_hostless_nir`) |
388
  | Spectral classes of the worst-fitted nearby M dwarfs | the 19 MARCS misfits of the trait test looked up in LAMOST DR5 and SDSS DR17 within 3 arcsec of their positions at those surveys' epochs | 4 have spectra, typed M2 and M3 by LAMOST's pipeline and M2V by SDSS's, neither of which carries a metallicity class; the subdwarf verdicts rest on the luminosity and J-Ks tests (`gaia_xp_misfit_spectra`) |
389
  | Gamma-ray points inside TeV glows | the 7 clean unassociated 4FGL-DR4 sources within 2 deg of l 312.07, b 0 against the H.E.S.S. Galactic Plane Survey's components (VizieR J/A+A/612/A1), inside when within twice a component's Gaussian width, against the 106 clean unassociated sources elsewhere in the survey's footprint | 1 of the 7, 4FGL J1417.7-6057, lies inside HESS J1418-609, against 17 of 106 elsewhere (Fisher p 0.71); the other 6 lie outside every TeV source, most 0.5-1.6 deg above the plane, so the TeV glows of the Kookaburra complex do not hold the pile (`fermi_unassociated_in_tev_glows`) |
390
  | Subdwarf indices of the worst-fitted nearby M dwarfs | the 19 MARCS misfits' LAMOST DR5 and SDSS DR17 spectra, put in air at rest and measured in the CaH2, CaH3 and TiO5 bands, and the zeta of Lepine et al. (2013); APOGEE DR17 holds none of the 19 | 4 measured: Gaia DR3 2470131113219840128, the one 2.3 mag below the main sequence, is a subdwarf (zeta 0.56); the other three, 0.5-0.8 mag below, are dwarfs of ordinary metallicity (zeta 1.01-1.12), so the faintness of most is not the subdwarfs' (`gaia_xp_misfit_subdwarf_indices`) |
 
403
  | Atmospheres of the rocky planets of red dwarfs | ESO Phase 3 (HARPS, ESPRESSO, NIRPS, CRIRES, UVES), the CADC (CFHT SPIRou) and KOA (Keck NIRSPEC): 1,611 spectra in or beside the transits of 42 of the 114 planets below 1.8 Earth radii of stars cooler than 4000 K within 50 pc, 13 planets with four or more spectra on each side of a transit, each night's out-of-transit median as the star; the 229 HARPS spectra of the Moon through the Venus transit of 2012 June 6 as the control | 27 planet-instrument-line tests and no planetary absorption: 3 sigma limits on He I 10830 in the planet's frame (the core mean, the reversed trail's residual folded in) of 0.12 per cent at GJ 486 b from 86 SPIRou in-transit spectra, below the 0.2 published from two of its transits, 0.16 and 0.30 at HD 260655 b and c, 0.50 and 0.57 at L 98-59 d and c, 0.75 at TOI-270 b, 2.1 at LP 791-18 d and 15.7 at TRAPPIST-1 b, the first helium limits for all but GJ 486 b and TRAPPIST-1 b; the M dwarfs' H alpha and Na D cores move by 1-13 per cent with the sky's sodium and the stars' flares, every excursion matched by the reversed trail; the Moon through the Venus transit shows a -2.9 per cent core residual in both lines from the night's airmass, matched by the reversed trail as well; a 0.5 per cent line injected in the planet's frame returns 0.12-0.20 in the core mean, 0.4 of a 4 km/s line's depth (`rocky_dwarfs_shoreline`) |
404
  | Planet-frame compositions of the giant planets | ESO Phase 3 and the CADC: the 48 HARPS and ESPRESSO transit sets of four or more in-transit spectra among the 945 giant planets brighter than V 11 (588 of their 800 hosts hold archived spectra), 2,463 in-transit spectra of 45 planets with the same nights' spectra beside them, and the SPIRou sets of WASP-76 b and HD 209458 b and the NIRPS sets of WASP-76 b and WASP-121 b; Kurucz's gfall lines for Fe I, Fe II, Ti I, V I, Cr I, Na I, Ca I, Mg I and K I, petitRADTRANS cross-sections for CO and water; SIMBAD's velocity where the archive lacks one | 47 planet-instrument sets searched and one species found: vanadium in WASP-121 b at 6.2 sigma on the orbit against a sham of 2.8 (Ben-Yami et al. 2020 found it at 4.5 from the same spectra), chromium there at 2.5 and in WASP-76 b at 3.1 under the threshold; a species resting on one line (Ca I, Mg I) or two (Na I, K I) is left to the line tests, since a deep stellar line's transit distortion sums along every trail; the shadow fit is bounded, kept to the optical atomic templates and given to the sham rows as well, since laid into the in-transit rows alone it sums to tens of sigma at rest; water in WASP-76 b at 4.7 sigma on the orbit from its 87 archived SPIRou in-transit spectra after three SysRem passes, the sham at 1.9 and the map's peak at K_p 50, so held under the rule (Hood et al. 2024 found it in one of those transits), CO there at 3.4; water in HD 209458 b's 13 SPIRou spectra at 3.9 with the map's peak off the orbit; HD 209458 b empty in the optical as published; sodium in WASP-69 b, a published detection, at 1.0 sigma in the cross-correlation, its two D lines left to the line tests; every other orbital value below 6 sigma or matched by the sham, the K dwarf HD 189733's own iron pattern reaching 5.4 against a sham of 6.4 and WASP-101 b's Fe II 5.7 with the map's peak at K_p 30, which the rule refuses; WASP-189 b, an A star rotating at 93 km/s, beyond the shadow model and flagged; the NIRPS sets of WASP-76 b and WASP-121 b, whose telluric residuals drive the sham maps to -12 and -90 sigma, marked not measured; a 0.5 per cent iron line injected into WASP-76 b adds 0.8 sigma; reflected starlight, the star's own spectrum as the template with the pattern and five principal components taken out of the rows and the gain measured by a 100 ppm copy laid into the same spectra: none from 51 Peg b at 43 ppm (3 sigma) from 300 HARPS and ESPRESSO spectra, the probe returned at 0.90, which places the contrast of 6e-5 claimed by Martins et al. 2015 at 4.2 sigma in the map, and tau Boo b's 299 campaign spectra near superior conjunction, where the components take 0.79 of the probe, at 546 ppm (`giants_planet_frame`) |
405
  | Companions of single-lined binaries along their known orbits | ESO Phase 3: the 37 EBLM binaries with Gaia DR3 single-lined orbits and archived HARPS series of 20 or more spectra above S/N 10, periods below 100 d covered three or more times, up to 300 spectra each spread over the span, and TOI-1338's 260 ESPRESSO spectra; Gaia DR3 non-single-star orbits and SB9 for the catalogue orbits; an M1 V template from GJ 367's archived HARPS spectra and a G0 V velocity template from J0310-31's own | four companions at 5 sigma or more on their own nulls, each summit at an offset of +1.0 km/s set against 10,000 draws of each null with a Gumbel law for the tail: TOI-1338's (ESPRESSO) at a false-alarm probability of 1e-11, J0310-31's at 8e-12, HD 4875's (J0050-18) at 1e-8 and J2101-45's at 4e-9, the last at 1.5e-7 (5.1 sigma) across the survey's 35 binaries; with the companion's systemic offset free, K2 of 77.27 +- 0.10 +- 0.15, 88.12 +- 0.18 +- 0.34 and 75.29 +- 0.30 +- 0.87 km/s (statistical, then systematic from the series' parts by date and its seasons) for the three with published values (77.16 +- 0.48, 88.27 +- 0.46 and 75.13 +- 0.16), masses within 0.6 per cent of the published dynamical ones and the companions' lines +1.05 to +1.25 km/s from the primary's systemic velocity, which held at zero moves K2 by up to 0.55 km/s; J2101-45 at K2 65.41 +- 0.32 +- 0.32 km/s with minimum masses of 1.415 and 0.552 Msun, held under 3 and 8 principal components, either half of the band and an L 98-59 template and recovered when injected into its spectra; J0649-27, J0825-67 and J1141-37 candidates at 3.9, 3.6 and 3.3 sigma alone and 3.0, 2.6 and 2.1 across the survey; TOI-1338's 73 HARPS spectra at 2.8 sigma and J1928-38's 74 at 0.3 at their published K2; J0543-57 and J2126-28 too thin to search (`binaries_eblm_known_orbits`) |
406
+ | A silicon photovoltaic edge | Gaia Catalogue of Nearby Stars with its 2MASS photometry: 132,153 single-looking stars at BP-RP 0.5-3.0 with J and Ks to 0.03 mag, RP-J five locus widths and five errors above the running median at their colour with J-Ks on its own locus, against the stars as far below; 2MASS flags, Gaia neighbours within 4 arcsec and the height above the main sequence | 574 above against 16 below: 422 blends inside the 2MASS beam, 2 with 2MASS flags, 30 twins above the main sequence; 120 left, 36 of them more than a magnitude below the main sequence where subdwarfs and white dwarfs beside M dwarfs lie and the rest on it; RP-J at fixed BP-RP also rises with metallicity, so photometry alone does not separate a collector from a metal-rich star (`pv_edge_rp_j`) |
407
+ | Single-transit flashes in Hipparcos | Hipparcos epoch photometry of the 12,589 stars within 100 pc with a Gaia DR3 best neighbour and a scatter below 0.02 mag: a clean transit 0.3 mag and five robust deviations brighter than the star's median, against the transits as much fainter; catalogue-wide events, recurrence, Hipparcos's and SIMBAD's variability and RUWE as vets, and the pass partner 20.6 minutes away through the other field of view | 34 stars brighter against 51 fainter: 14 and 22 variables, 2 and 10 catalogue-wide events; 18 unexplained against 19, and the pass partner shares none of the 18, so the single brighter transits are the photometric outliers the fainter side shows as often (`hipparcos_single_flashes`) |
408
+ | Transit-timing residuals that compress | Holczer et al. (2016) Kepler transit times: 1552 KOIs with 30 or more clean times, a line and the two strongest sinusoids removed, the residual in four quantile symbols compressed with zlib against 300 shuffles and 300 first-order autoregressive surrogates at its own lag-one correlation | 2 below both nulls at p 0.0033 against 0.02 by chance: KOI-984.01, a published large timing variation with reduced chi2 13 after the sinusoids, and KOI-1809.02, 93 bytes against 98 shuffled, at the chance count; 0.8 per cent below 0.01 against shuffles alone (`kepler_ttv_compressibility`) |
409
+ | Telecom-band laser lines | the shoreline programme's cached NIRPS and SPIRou spectra: 852 spectra of 19 instrument-star groups of nearby M dwarfs; unresolved emission above six local deviations at 1260-1330 and 1530-1625 nm, Paschen beta masked, recurring within 1.5 km/s in the star's frame on three or more nights whose barycentric corrections spread over 3 km/s, against the dips the same test finds | 27 recurring peaks against 204 recurring dips: 16 hold their wavelength better at the telescope than in the star (sky emission the subtraction left), 2 recur in other stars; the 9 left, 6 of them in L 98-59 and TOI-1078 and 3 in TRAPPIST-1, are fewer than the dips no laser makes (`telecom_band_lasers`) |
410
 
411
  ## Queued
412
 
 
542
  |---|---|---|
543
  | (883607) 2016 TA56, a candidate dark comet on a Jupiter-family orbit: a transverse non-gravitational acceleration A2 of -3.45e-12 +- 0.37e-12 au/d^2 (9 sigma with the 2007 night as one position) on a body of 2.4 km and albedo 0.017, 15-39 times all absorbed sunlight at 1000 kg/m^3; the two orbits part by 4-7 arcsec in 2030 August-September | `darkcomet_2016_ta56` | papers/dark_comet |
544
  | 2016 YB13, a transient retrograde co-orbital of Jupiter not in the literature: inclination 140 deg, eccentricity 0.41, semi-major axis 5.46 au on a 642-day arc with a formal eccentricity error of 2e-6; the nominal orbit and fifty clones of its covariance integrated with the four giant planets (hybrid integrator, step 0.05 yr) hold Jupiter's semi-major axis without an approach inside 0.5 au for 7 kyr each way from the nominal orbit, for a median of 3 kyr forward (10th to 90th percentile 1-27 kyr) and 13 kyr backward (6-31 kyr) over the clones, with 2 of 50 still held at -100 kyr and none at +100 kyr, while the control (514107) Ka'epaoka'awela holds for the whole 100 kyr each way and never comes within 0.7 au; a Jupiter-crosser of that eccentricity outside the resonance meets the planet within a few kyr; the resonant angle was not established under the conventions tried | `sbdb_retrograde_coorbitals` | a transient member of the resonance on a 10 kyr timescale, which the published cases of such capture explain; a dynamics note would need the angle and the capture history |
545
+ | PSR J1420-6048 glitches on a schedule: the eight glitches from MJD 51600 to 58555 come at intervals of 994 +- 196 days, a scatter random intervals give once in four thousand draws; the pulsar lies at -61 deg, where Jodrell Bank does not observe, and every row of the Jodrell Bank table for it cites another paper (Yu et al. 2012, Weltevrede et al. 2011, Lower et al. 2021, Liu et al. 2024), the latest timing being Liu et al.'s Fermi-LAT and Parkes series to MJD 59453, 898 days after the eighth glitch and inside the interval the schedule gives | `jbo_glitch_schedules` | a young pulsar of Vela's kind; the published record ends before the ninth glitch falls due, and the next published timing dates it |
546
  | Ma et al. (2023)'s eight Breakthrough Listen signals of interest: MLc2-MLc8 lie on their own lines in their cadences' OFF scans and MLc3-MLc8 in other stars' pointings; MLc8 is one terrestrial carrier rising 1.72 kHz over four hours through four other stars' cadences; the published table's drift signs run opposite to df/dt and its MJD column holds GUPPI scan labels | `bl_soi` | papers/ml_signals |
547
  | HD 31435's 5.48 per cent polarisation (Moneti et al. 1984) belongs to another star: the star's photometry, astrometry, spectrum and infrared allow no polariser, and the field behind the cloud gives the measured angle | `intrinsic_polarisation` | papers/hd31435 |
548
  | KIC 2557430 (KOI-6277): the published surface temperatures run too hot; Gaia resolves WDS J19074+3749AB into the eclipsing pair at 6130 K and a co-moving K star whose luminosities sum to the light observed | `debs_missing_flux` | papers/kic2557430 |
 
560
  | Gaia DR2 holds no source for Lalande 21185 and three other stars within 100 pc at G below 17 moving faster than 585 mas/yr, nor for 90 stars 2-7 arcsec from a star 1-11 mag brighter, all of which DR3 catalogues; DR3 in turn holds iota Leo B (G 6.8, 2.1 arcsec from iota Leo) and chi Eri B (G 9.7, 2.5 arcsec from chi Eri) as no source of their own, both catalogued by DR2 | `gaia_dr3_appeared`, `gaia_dr2_vanished` | catalogue property |
561
  | GALAH DR4 lithium of cool dwarfs: 18 of the 135 dwarfs below 5300 K listed with a clean A(Li) above 2.0 and isochrone ages above 6 Gyr show no Li I 6708 line in their own spectra where the catalogue gives 113-600 mA, a line the refit recovers in 134 of 135 injections at the same S/N; the highest, Gaia DR3 3910691559800909568, listed at A(Li) 3.69 (401 mA), measures 17 +- 28 mA; the 95 real lines belong to young stars and binaries whose isochrone ages are wrong | `galah_lithium_old_dwarfs` | catalogue corrections |
562
  | HERMES camera I records round spots of 1.5-1.7 million electrons, the charge 5.3-6.2 MeV releases in silicon (the energies of alpha particles), about 4 px across like light through the spectrograph; in an observation of one exposure GALAH DR4 passes one into a spectrum as an emission line 21 times the continuum (Gaia DR3 609133088216624000, 7790.24 A rest, 2017 January 2, fibre 47), the spot 2.2 px from the fibre's trace, where the arc lines fall within 0.6 px | `laser_galah` | instrument artefact |
563
+ | CNEOS fireballs since 2018 faster than the Sun lets anything bound move: 2022-07-28 01:36:07 UTC (CNEOS-22 of Cloete and Loeb 2026), 47.4 against 41.8 km/s, and 2021-05-06 05:54:26 UTC, 43.7 against 41.9 km/s, neither bound in 20,000 draws within the post-2018 errors Peña-Asensio et al. (2025) measured against ground-based networks; 2026-04-01 02:13:14 UTC over the South Atlantic, 51.8 km/s heliocentric from CNEOS and the Polar-IM of Cloete and Loeb (2026), is 41.5 and 41.1 km/s on the velocities Silber et al. (2026) triangulate from GOES-East's lightning mapper and MTG-I1's lightning imager, 18 per cent below CNEOS's and bound; CNEOS-25 (2025-02-12), listed as hyperbolic by Cloete and Loeb, is bound at 37.4 km/s from the database's present entry; GOES-16 and GOES-17 saw 2022-07-28, their triangulated trail descending at 18.4 km/s from 42 to 33 km, 0.61 of the CNEOS speed, where the mappers' trail speeds on 16 slower fireballs run at 0.66-1.65 of CNEOS's; no Global Meteor Network camera recorded any of the 360 CNEOS fireballs | `cneos_hyperbolic_fireballs`, `cneos_glm_bolides`, `cneos_gmn_trajectories` | the 2022 sighting fixes that event's time and place; the mappers' trail speeds scatter too widely to test its 21 per cent excess, so an infrasound or seismometer record would settle its speed |
564
+ | 22 compact radio sources of 65-890 mJy at 4.8 GHz, more than 30 deg from the Galactic plane, with nothing in AllWISE, CatWISE2020, unWISE, Pan-STARRS1 or the Legacy Surveys DR10 within 2-3 arcsec of positions VLASS confirms, so above 5,000 in radio-to-infrared flux ratio, beyond the infrared-faint radio sources; 17 are VLBI-compact, and their spectra are peaked or steep more often and flat less often than hosted sources' (8 of 22 flat against 124 of 200), the signature of young compact radio galaxies rather than beamed quasars; none shows in VHS, VIKING or UKIDSS, the 15 those cover fainter than K 18.1, beyond redshift 1.5 on the K-z relation of radio galaxies, and the two HSC-SSP DR3 covers show nothing to about r 26 | `crates_hostless_flat_spectrum`, `crates_hostless_seds`, `crates_hostless_nir` | a sample of candidate young radio galaxies beyond redshift 1.5; K-band imaging deeper than 20 or a radio redshift from HI or OH absorption would place them |
565
  | Nearby M dwarfs too faint for their colour: 18 mid-M dwarfs at 30-53 pc, G 13-16, lie 0.36-1.0 mag below the main sequence at fixed G-RP, with parallaxes measured to 0.1 per cent, concentrated at high Galactic latitude (median 64 deg against 25) and moving faster than their peers (median 45 km/s, two at 119 and 132), with no companion, activity or ultraviolet sign; the three with spectra show the CaH and TiO bands of ordinary metallicity (zeta 1.01-1.12), while the one further 2.3 mag below is a subdwarf (zeta 0.56); Gaia's GSP-Phot fits them worst of all nearby M dwarfs | `gaia_xp_worst_fits_nearby`, `gaia_xp_misfit_traits`, `gaia_xp_misfit_spectra`, `gaia_xp_misfit_subdwarf_indices` | open: mildly metal-poor old disc stars above the subdwarf threshold would sit this low, which a metallicity from new spectra of the other 15 would test; at ordinary metallicity, 30-60 per cent too little light for their colour has no explanation in hand |
566
  | The densest pile of clean unassociated Fermi-LAT sources in the inner plane, 7 within 2 deg of l 312.1 deg (the Galactic bar's L5 line of sight and the Crux-Centaurus tangent) against a mean of 1.3, sits around the Kookaburra and Rabbit nebulae: a random forest trained on 3,946 associated sources classes none of its 5 measurable members as a pulsar, against a quarter of the plane's other unassociated sources; four are steady uncurved power laws and the fifth is the extended FGES J1409.1-6121; only 1 of the 7 lies inside a H.E.S.S. source, HESS J1418-609, the plane's own rate, and the rest sit outside every TeV glow, most 0.5-1.6 deg above the plane; they sit on more dust than their latitudes' share (median rank 0.69, p 0.038) | `fermi_bar_lagrange_points`, `fermi_unassociated_pile_classes`, `fermi_unassociated_in_tev_glows`, `fermi_pile_dust` | not pulsars and not inside the TeV-bright nebulae; unexplained, and a dedicated LAT fit of the region with the gas maps would say whether they are emission the diffuse model misses |
567
  | EBLM J2101-45's M-dwarf companion, measured for the first time, from 75 archived HARPS spectra over 2298 d: K2 65.41 +- 0.32 +- 0.32 km/s (statistical, then systematic from its eight seasons) at false-alarm probabilities of 4.3e-9 (5.8 sigma) on its own nulls and 1.5e-7 (5.1 sigma) across the survey's 35 binaries, the five variants of the analysis giving 65.26-65.91 km/s and a companion injected at a flux ratio of 1e-3 recovered at 65.61 km/s; minimum masses of 1.415 +- 0.024 and 0.552 +- 0.006 Msun, within 0.7 per cent of the masses themselves since the binary eclipses and its primary's Gaia DR3 radius of 2.67 Rsun then needs sin^3 i above 0.993, against the model-based 1.29 +- 0.10 and 0.523 +- 0.043 Msun of Triaud et al. (2017); HD 4875's companion, measured before only in the near-infrared, is detected in the optical, and the companions of J0649-27, J0825-67 and J1141-37 remain candidates at 2.1-3.0 sigma across the survey | `binaries_eblm_known_orbits` | papers/double_lined |
README.md CHANGED
@@ -281,7 +281,7 @@ on any vet that is not a code.
281
  | Interstellar arrivals along the ecliptic | interstellar objects carrying the velocities of the Gaia DR3 stars within 100 pc, drawn in proportion to speed and to the focused cross-section for perihelia within 2 AU, impact points uniform over it; inclinations against the ecliptic, and least distances to Venus, Mars and Jupiter on their mean ellipses with drawn phases against 3I/ATLAS's own (its elements on astropy's ephemeris) | `seti.py solar_system isoarrival fetch\|run\|record` |
282
  | Impulses on 3I/ATLAS's orbit | every MPC position of 3I/ATLAS in ASSIST (DE440 and sb441-n16) with per-site weights and same-night inflation; gravity alone, outgassing of r^-2 or water-ice g(r), constant, changing at perihelion or in seven bins, and an impulse (three velocity components at one instant) at perihelion, at the passages of Mars and Jupiter or every five days; models compared on one set of kept positions, nights resampled, the busiest observatories left out | `seti.py solar_system iso3i fetch\|fit\|compare\|scan\|boot\|sites\|record` |
283
  | Long occulters' companions | Gaia DR3 RUWE, astrometric excess noise and its significance of the stars eclipsed for months, ranked among 400 field stars within 0.15 deg matched in G and colour; EE Cep, whose disk-bearing companion is known, as the control | `seti.py dimming occulters [record] [--stars NAME ...] [--controls NAME ...] [--dg 0.3] [--dcolour 0.2] [--n-controls 100] [--radius-deg 0.15]` |
284
- | Dark-comet candidate | MPC astrometry refitted in ASSIST with and without A2, with A1 and A2, under site weights, the sqrt(N/4) same-night deweighting of Veres et al. (2017) and each night as one position, and with each apparition left out; each apparition's offset from the gravity-only orbit of the others split along and across the apparent motion of the moving Earth, the along-track part as a clock error; every position's residuals against three orbits for the residual plot; the two orbits' separation ahead, with each orbit's prediction ellipse from its covariance; A2 refitted with one night left out at a time, with nights resampled with and without the decisive apparition held, and under other clipping thresholds, error floors and default uncertainties; the precovery frames re-measured against Gaia DR3 and set against both orbits; the known asteroids around the precovery track from SkyBoT; A2 under a night-level covariance whose shared variance is set by restricted maximum likelihood, and the error the decisive night would have to share to lose it; the positions in the precovery frames that orbits fitted without that night allow, A2 held at each value; every moving source in the whole precovery frames, linked into straight tracks, with chance tracks measured by shuffling the frame times and the completeness by injected copies of the object, and the median flux along the allowed positions and along shifted control lines; the next apparition's daily ephemeris of both orbits and the A2 it would measure without the decisive night; NEATM on NEOWISE W2 at fixed beaming parameters and under other assumptions | `seti.py solar_system darkcomet fetch\|thermal\|variants\|refit\|record\|precovery\|robust\|blockcov\|frames\|field\|locus\|census\|forecast DESIG`; `papers/dark_comet/make_numbers.py`; `papers/dark_comet/README.md` lists the paper's data files and the command behind each |
285
  | Coherent hyperbolic meteor streams | GMN yearly trajectory summaries; each sporadic hyperbolic orbit's incoming asymptote and v_inf, a 1 deg and 3 km/s neighbourhood against the 10 deg density, IAU MDC showers matched by radiant, date and speed; nulls from shuffled speeds, independent speed errors and a shared speed overestimate on the elliptic sporadics | `seti.py solar_system meteors fetch\|analyse\|record` |
286
  | Cosmic-ray doublets | Auger Phase One events above 32 EeV (Zenodo 6504276); pairs and triplets in 2 deg against 10000 time permutations, Gaia stars within 100 pc in each circle | `seti.py highenergy doublets [record] [--set phase1\|sd1500\|sd750\|inclined]` |
287
  | Clockwork flares | flare start times from the Kepler (Yang and Liu 2019) or TESS (Yang et al. 2023, `CLOCKWORK_CAT=tess`) catalogues; H-test search, a null of other stars' flare times in the same quarters or orbits, then bursts, eclipsing binaries, spacecraft timing and phase scatter | `seti.py flashes clockwork search\|null\|vet\|record` |
@@ -415,25 +415,28 @@ on any vet that is not a code.
415
  | Planets on perfect circles | planets of the composite table with periods beyond 30 days and a measured eccentricity; an upper eccentricity below 0.002, with fixed values and limits set aside | `seti.py transits circles [record] [--p-min-d 30] [--tol 0.002]` |
416
  | Asteroid spins on the clock | secure LCDB rotation periods quoted to three decimals between 2 and 48 hours; a period within 0.02 per cent of a whole number of hours, against the half-hour windows and uniform fractions, the day's harmonics marked as aliases | `seti.py solar_system hourspins [record] [--tol-rel 0.0002] [--p-min-h 2] [--p-max-h 48]` |
417
  | Planets on whole days | planets of the composite table with periods of 1.5-400 days known to better than 0.00002 days; a period within 0.00002 days of a whole number, against the half-day windows and uniform fractions | `seti.py transits wholedays [record] [--tol-d 0.00002] [--p-min-d 1.5] [--p-max-d 400]` |
418
- | Light at 12 um alone | Gaia Catalogue of Nearby Stars objects with clean W1, W3 and W4; W1-W3 five widths and five errors above the single-star locus at their BP-RP while W1-W4 stays within two widths, against the stars as far below; AllWISE flags, faint W3, a second Gaia source in the beam and a W4 excess at three errors as vets | `seti.py infrared w3only [record] [--widths 5] [--errors 5] [--w4-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w3-faint 11] [--beam-arcsec 10]` |
419
  | Symmetric flares | TESS flares of Yang et al. (2023) lasting 40 minutes or more; a rise from start to peak as long as the decay within 10 per cent of the duration, or longer, counted by duration and by the star's flare count | `seti.py flashes symflares [record] [--dur-min-d 0.028] [--sym-frac 0.1]` |
 
420
  | Pulsars ticking in whole hertz | ATNF pulsars with periods quoted to eight digits or more; a spin frequency within 0.00001 Hz of a whole hertz or a period within 0.00001 ms of a whole millisecond, against the half-integer windows and uniform fractions, with rounded periods counted apart | `seti.py radio_sky wholehz [record] [--tol 0.00001] [--digits-min 8]` |
421
  | Pulsars on the hydrogen line's decimals | ATNF pulsars with periods quoted to eight digits or more; a spin frequency within one part in 100,000 of the hydrogen line's frequency scaled by a power of ten, against the half-decade windows and uniform logarithmic fractions | `seti.py radio_sky hydrogenhz [record] [--tol-rel 0.00001] [--digits-min 8]` |
422
  | Stars that stepped a magnitude between Gaia releases | Gaia DR3 sources within 100 pc whose DR2 counterpart within 0.1 arcsec differs by more than a magnitude in mean G; transit counts, variability flags, SIMBAD types, DR2's saturation above G 4 and the missing colours of sources in a bright neighbour's light as vets | `seti.py dimming releasestep [record] [--dmag 1.0] [--plx-min 10] [--match-mas 100] [--min-obs 20] [--bright-g 4]` |
423
  | Lurkers at Earth's Lagrange points | asteroids of the Small-Body Database within 0.01 au of Earth's semi-major axis with e below 0.3 and i below 30 deg; the mean longitude at epoch relative to Earth's, counted within 20 deg of L4 and L5 against the rest of the ring, each read for its arc and condition code | `seti.py solar_system lagrange [record] [--da-au 0.01] [--e-max 0.3] [--i-max-deg 30] [--half-width-deg 20]` |
424
  | Watchers of Jupiter's transits | Gaia Catalogue of Nearby Stars objects within a Sun's angular radius at Jupiter's distance of Jupiter's orbital plane, matched to GALEX within 5 arcsec at 2007.0, against the stars 1-5 deg from the plane and the band moved 2 arcmin; any planet's zone from its orbit | `seti.py neighbourhood watchers [record] [--planet jupiter] [--catalogue II/335/galex_ais] [--radius-arcsec 5] [--epoch 2007]` |
425
  | Light at 2 um alone | Gaia Catalogue of Nearby Stars objects with clean J, Ks and W1; J-Ks five widths and five errors above the single-star locus at their BP-RP while J-W1 stays within two widths, against the stars as far below; 2MASS flags and SIMBAD as vets | `seti.py infrared ksexcess [record] [--widths 5] [--errors 5] [--w1-widths 2] [--colour-min 0.5] [--colour-max 3.0]` |
 
426
  | Planets in step with their star's spin | planets of the composite table whose host carries a rotation period; an orbital period at a whole multiple of 2-20 of the rotation within 0.5 per cent, against the half-integer windows and uniform fractions, each with the source of the rotation period | `seti.py transits spinsteps [record] [--tol-rel 0.005] [--n-max 20]` |
427
  | Nearby light bluer than any star | Gaia Catalogue of Nearby Stars objects with BP-RP below -0.65; the BP/RP flux excess, the image-peak and RUWE flags, the white-dwarf probability and SIMBAD's type as vets | `seti.py ultraviolet bluest [record] [--colour-max -0.65] [--excess-max 0.2]` |
428
  | Comets pushed toward the Sun | comets and asteroids of the Small-Body Database with a negative radial non-gravitational term A1 at three sigma; the arc, condition code, transverse term and asymmetric outgassing parameter as vets | `seti.py solar_system sunward [record] [--sigma 3]` |
429
  | Galaxies warm without star formation | quiescent HECATE galaxies within 150 Mpc with GSWLC masses and rates; a 22 um luminosity above a tenth of a solar luminosity per solar mass and within a factor of three of the far-infrared, against the quiescent population, with the nuclear-activity flags and the inclination as vets | `seti.py infrared warmgalaxies [record] [--d-max-mpc 150] [--ssfr-max -11] [--heat-min -1.0] [--warm-min -0.5] [--edge-on-deg 70]` |
430
  | Stars that dimmed since Hipparcos | Hipparcos stars within 100 pc with a Gaia DR3 best neighbour; G - Hp against the running median in BP-RP, a step of 0.5 mag either way, with Hipparcos's scatter and variability, Gaia's variability flag and RUWE, SIMBAD's type, pair names and Gaia neighbours as vets | `seti.py dimming hipdim [record] [--dmag 0.5] [--plx-min 10] [--bright-g 3] [--pair-arcsec 10]` |
 
431
  | Asteroids on polar orbits | asteroids and comets of the Small-Body Database on bound orbits within 3 deg of 90 deg inclination; those within 0.5 deg of polar against a flat density and the bands either side, each read for its arc and condition code | `seti.py solar_system polar [record] [--half-width-deg 0.5] [--band-deg 3] [--condition-max 6]` |
432
  | Stars enriched evenly in every heavy element | GALAH DR4 stars with all eleven neutron-capture elements clean; every [X/Fe] above +0.4 dex with a spread below 0.1 dex, against the stars depleted as evenly and the sample's own spread | `seti.py composition evenheavy [record] [--mean-min 0.4] [--spread-max 0.1]` |
433
  | Transits longer than the star allows | transiting planets of the composite table; a duration beyond 1.25 times the central circular maximum at the catalogued geometry, with the duration error, the sources of duration and radius and the eccentricity as vets | `seti.py transits longtransits [record] [--excess 1.25] [--err-max 0.2]` |
434
  | Gamma rays peaked like a line | 4FGL sources above 10 sigma; a log-parabola beta above 0.8 at a curvature significance above 4, against the catalogue's curvatures, with the source class and the analysis flags as vets | `seti.py highenergy gammapeak [record] [--sig-min 10] [--beta-min 0.8] [--curve-min 4]` |
435
  | Nearby stars flickering by the minute | Gaia DR3 short-timescale variables within 100 pc with characteristic frequencies above 48 cycles a day; the white-dwarf locus, SIMBAD's type, the image and RUWE flags and the flare stars' colour as vets | `seti.py flashes flicker [record] [--plx-min 10] [--freq-min 48] [--red-colour 2.0]` |
436
- | Infrared dimming next door | Gaia Catalogue of Nearby Stars objects within 20 pc; the AllWISE profile W1 at 2010.5 against CatWISE2020's at 2015.0, a change of 0.3 mag either way, with variability flags, RUWE, SIMBAD's type, the WISE flags, CatWISE's saturation, the match separation and the proper motion as vets | `seti.py infrared irdim [record] [--plx-min 50] [--dmag 0.3] [--radius-arcsec 3] [--saturation 8.5] [--match-arcsec 1.5] [--fast-mas-yr 1000]` |
437
  | Systems turned face-on to us | non-transiting planets of the composite table with a measured inclination; an orbit within 5 deg of either pole against the share random orientations give, with the inclination error and method as vets | `seti.py transits faceon [record] [--i-max-deg 5] [--err-max-deg 5]` |
438
  | Masers at rest in the universe's frame | the 6.7 GHz methanol masers of Pestalozzi et al. (2005); each peak velocity carried to the microwave background's frame, a maser within 2 km/s of rest there against the velocities' density within 30 km/s | `seti.py radio_sky maserrest [record] [--tol-kms 2] [--window-kms 30]` |
439
  | Waste heat in HI-dark galaxies | the ALFALFA HI-dark galaxies of Leisman et al. (2017); an AllWISE source at 5 sigma in W3 or W4 within 10 arcsec of the counterpart, against the positions moved 2 arcmin, with the AGN colour and a Gaia star as vets | `seti.py infrared hidark [record] [--radius-arcsec 10] [--snr 5] [--w1w2 0.5]` |
@@ -454,6 +457,7 @@ on any vet that is not a code.
454
  | Neutrinos with gamma-ray bursts | IceCube ten-year events above 10 TeV against Fermi GBM bursts; a neutrino within 100 s inside the two error circles plus a degree, against the chance rate from the event list and the circles | `seti.py highenergy nugrb [record] [--energy-min-gev 10000] [--window-s 100] [--extra-deg 1]` |
455
  | Warm stars in the Hyades | Hyades members of Hunt and Reffert (2023) with clean W1 and W3; W1-W3 five widths above the cluster's own locus, the share against the field's, with AllWISE flags and SIMBAD as vets; any cluster of the catalogue may be named | `seti.py infrared hyadeswarm [record] [--cluster Melotte_25] [--prob-min 0.5] [--widths 5] [--errors 5] [--field-share 0.0077] [--w3-err-max 0.2]` |
456
  | Resonant pairs without timing variations | Kepler planets in pairs within 2 per cent of 2:1 or 3:2; the timing scatter of each against the variation its neighbour's radius-estimated mass demands, a quiet planet below a fifth of it, with the estimated masses as the vet | `seti.py transits ttvabsent [record] [--delta-max 0.02] [--quiet-ratio 0.2] [--pval-min 0.5]` |
 
457
  | Light at 3.4 um alone | Gaia Catalogue of Nearby Stars objects with clean Ks, W1 and W2; Ks-W1 five widths and five errors above the single-star locus while Ks-W2 stays within two widths, against the stars as far below; AllWISE's plain W1, its flags, 2MASS's flags and SIMBAD as vets | `seti.py infrared w1only [record] [--widths 5] [--errors 5] [--w2-widths 2] [--colour-min 0.5] [--colour-max 2.5]` |
458
  | Dark companions on perfect circles | Gaia DR3 astrometric orbits within 200 pc with periods beyond 200 days; an upper eccentricity below 0.005 against the solutions' own, with the significance as the vet | `seti.py neighbourhood darkcircles [record] [--plx-min 5] [--p-min-d 200] [--tol 0.005] [--sig-min 20]` |
459
  | Planets lapping their star's spin in whole steps | planets of the composite table whose host carries a rotation period; a rotation period at a whole multiple of 2-20 of the orbital period within 0.5 per cent, against the half-integer windows and uniform fractions, each with the source of the rotation period | `seti.py transits spinlaps [record] [--tol-rel 0.005] [--n-max 20]` |
@@ -498,7 +502,7 @@ on any vet that is not a code.
498
  | Stars that changed colour since Hipparcos | Hipparcos B-V against Gaia BP-RP through the sample's own run, outliers read for variability, binarity, saturation and the spectral class | `seti.py dimming colourchange [record] [--widths 5] [--min-mag 0.2] [--bv-min -0.3] [--bv-max 2.0] [--g-sat 6] [--e-bv-max 0.03] [--slope 2] [--class-tol 0.45]` |
499
  | Eclipsing binaries on whole days | Kepler eclipsing binaries with periods on whole days, free of the ground's day aliases, against the periods' density | `seti.py flashes ebwholedays [record] [--tol-d 0.0002] [--p-max-d 50]` |
500
  | Retrograde co-orbitals of the giant planets | SBDB bodies sharing a giant planet's semi-major axis on retrograde orbits of modest eccentricity, read against the published cases and the arcs | `seti.py solar_system retroco [record] [--a-tol 0.05] [--i-min 90] [--e-max 0.5] [--arc-min-d 365]` |
501
- | Radio sources that switched off | Compact NVSS sources of 1995 absent from the VLASS quick-look components of 2019, read against SIMBAD, bright neighbours, RACS-low and the catalogue's holes | `seti.py radio_sky switchoff [record] [--flux-min-mjy 100] [--major-max-arcsec 25] [--radius-arcsec 20] [--dec-min -40] [--hole-deg 0.25] [--b-min 10] [--bright-jy 5] [--bright-deg 0.5] [--racs-dec-max 41]` |
502
  | Bodies pushed out of their orbital planes | SBDB bodies whose normal non-gravitational term rivals the radial, read against jets, dark comets and arcs | `seti.py solar_system outofplane [record] [--sigma 3] [--ratio-min 0.5] [--arc-min-d 1000]` |
503
  | Gamma rays harder than any shock | 4FGL sources whose photon index is harder than any accelerator gives, read against their associations and extension | `seti.py highenergy hardgamma [record] [--index-max 1.3] [--sig-min 10]` |
504
  | Stars whose distance changed since Hipparcos | Hipparcos against Gaia parallaxes with scaled errors, outliers read for misidentification, binarity, solution quality and the Gaussian tail | `seti.py neighbourhood receded [record] [--sigma 5] [--min-mas 2] [--g-sat 6] [--f2-max 3] [--match-mag 2]` |
@@ -539,7 +543,7 @@ on any vet that is not a code.
539
  | What sets the worst-fitted nearby M dwarfs apart | the XP misfits' colours, luminosity, J-Ks, speed, radial-velocity scatter and ultraviolet against peers of their colour and magnitude | `seti.py composition xpmisfits record [--controls 3000]` |
540
  | What a pile of unassociated gamma-ray sources is | a random forest on 4FGL spectral shape and variability, trained on associated pulsars, blazars and remnants, classing the clean unassociated sources of a window against the rest of the plane | `seti.py highenergy unasclass record [--l-deg 312.07] [--b-deg 0] [--radius-deg 2]` |
541
  | Fireballs the meteor cameras caught | CNEOS fireballs matched to Global Meteor Network trajectories by time and place, the camera speeds set against the satellite speeds | `seti.py solar_system fireballgmn record [--dt-s 10] [--km 300]` |
542
- | Hosts of the hostless radio sources in the near infrared | the hostless sources against VHS, VIKING and UKIDSS, each K magnitude or survey depth turned into a redshift by the K-z relation of radio galaxies | `seti.py radio_sky hostlessnir record [--arcsec 2]` |
543
  | Spectral classes of the worst-fitted nearby M dwarfs | the XP misfits' LAMOST and SDSS spectral classes against the trait test's metal-poor verdicts | `seti.py composition misfitspectra record [--arcsec 3]` |
544
  | Gamma-ray points inside TeV glows | clean unassociated 4FGL sources in a window of the plane against the extents of the H.E.S.S. Galactic Plane Survey's sources, against the rest of the footprint | `seti.py highenergy hgpsoverlap record [--l-deg 312.07] [--radius-deg 2] [--width-factor 2]` |
545
  | Subdwarf indices of the worst-fitted nearby M dwarfs | CaH2, CaH3 and TiO5 band indices and Lepine's zeta from the misfits' LAMOST and SDSS spectra | `seti.py composition subdwarfindex record [--arcsec 3]` |
@@ -623,7 +627,7 @@ The sky-fibre search, `seti.py lasers skyfibre search`, reads each BOSS/eBOSS sp
623
  | Nova ellipsoids | Gaia DR3 stars within 100 pc whose keyed-signal arrival from a conspicuous eruption (T CrB 1866 and 1946, GK Per 1901, V603 Aql 1918, RR Pic 1925, DQ Her 1934, CP Pup 1942, V1500 Cyg 1975, the supernovae of 1572 and 1604; `NOVA_EVENT` picks one) falls in the TESS years, matched to the TIC by CDS XMatch; lone flashes in each 2-minute light curve within 2 sigma of the arrival against the same sectors' light curves outside their windows, stars brighter than G 6 left out, counts capped at 3 | `seti.py flashes nova [--threads N]`, `seti.py flashes nova record` |
624
  | Non-thermal or recurrent lunar flashes | NELIOTA's flash lists from the tables of Liakos et al. (2020, PDF text) and (2024, arXiv HTML): id, date, class, duration, R and I with errors, selenographic position; colour temperature from R - I through the Planck ratio with Vega's colour as the zero point, against 1000-8000 K at 3 sigma; duration against 0.5 s; pairs within 1.5 deg on the Moon against 2000 permutations of the longitudes | `seti.py flashes neliota fetch\|analyse\|record` |
625
  | Stars dimmer in the infrared than their spectra allow | Gaia DR3 stars within 100 pc with RVS temperatures whose first ten GSP-Spec flags are 0 or 1, A_G below 0.05, RUWE below 1.4 and AllWISE W1 of quality A at 8-15 mag through Gaia's best neighbours; G - W1 against its median at the spectroscopic temperature, flagged where the colour temperature read from that locus is 500 K above the spectroscopic at 5 sigma, and read for a GSP-Phot or BP-RP temperature nearer the infrared colour's than the spectrum's | `seti.py infrared irdeficit [record] [--dteff-k 500] [--sigma 5] [--w1-min 8] [--w1-max 15] [--ag-max 0.05] [--ruwe-max 1.4] [--gspspec-flag-max 1]` |
626
- | Warm stars in Earth's transit zone | Gaia Catalogue of Nearby Stars objects with its WISE photometry, single by RUWE and IPD, W3 at S/N 10 or W4 at S/N 5; W1-W3 and W1-W4 more than five robust widths and three errors above the single-star locus at the same BP-RP; the warm share within 0.264 deg of the ecliptic against the share 1-5 deg away | `seti.py infrared etzwarm [record] [--planet jupiter] [--zone-deg 0.264] [--control-min-deg 1] [--control-max-deg 5] [--widths 5] [--errors 3] [--w3-err-max 0.1] [--w4-err-max 0.2]` |
627
  | Light at 4.6 um alone | Gaia Catalogue of Nearby Stars objects with WISE W1 8-14, W2 above 7.5 and W1, W2 and W3 measured to 0.05, 0.05 and 0.1 mag; W1-W2 more than five robust widths and five errors above the single-star locus at the same BP-RP with W1-W3 within two widths of its own, against the stars as far below; candidates read for AllWISE contamination, extension and variability flags and in SIMBAD | `seti.py infrared w2only [record] [--widths 5] [--errors 5] [--w3-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w2-min 7.5]` |
628
  | Sources shining in one filter only | Pan-STARRS1 DR1 (VizieR II/349) objects detected five or more times in one filter and never in the other four, brighter than g or r 19, i 18.5, z 18 or y 17, beyond what any stellar colour leaves undetected in the neighbouring filters | `seti.py infrared onefilter [record] [--limits 19 19 18.5 18 17] [--n-min 5]` |
629
  | Dwarfs whose 12 um output changed between 1983 and 2010 | Gaia DR3 stars within 100 pc at G below 8 and RUWE below 1.4; by CDS XMatch, IRAS PSC 12 um of high quality within 45 arcsec of the 1983 position and clean unsaturated AllWISE W3 within 3 arcsec of the 2010 position; the IRAS flux as a magnitude (zero point 28.3 Jy) against W3, flagged 1 mag from the median offset and read for a Gaia star within 45 arcsec and 2 mag in G, inside IRAS's beam and outside W3's | `seti.py infrared iraswise [record] [--g-max 8] [--ruwe-max 1.4] [--iras-arcsec 45] [--wise-arcsec 3] [--dmag 1] [--blend-dmag 2]` |
 
281
  | Interstellar arrivals along the ecliptic | interstellar objects carrying the velocities of the Gaia DR3 stars within 100 pc, drawn in proportion to speed and to the focused cross-section for perihelia within 2 AU, impact points uniform over it; inclinations against the ecliptic, and least distances to Venus, Mars and Jupiter on their mean ellipses with drawn phases against 3I/ATLAS's own (its elements on astropy's ephemeris) | `seti.py solar_system isoarrival fetch\|run\|record` |
282
  | Impulses on 3I/ATLAS's orbit | every MPC position of 3I/ATLAS in ASSIST (DE440 and sb441-n16) with per-site weights and same-night inflation; gravity alone, outgassing of r^-2 or water-ice g(r), constant, changing at perihelion or in seven bins, and an impulse (three velocity components at one instant) at perihelion, at the passages of Mars and Jupiter or every five days; models compared on one set of kept positions, nights resampled, the busiest observatories left out | `seti.py solar_system iso3i fetch\|fit\|compare\|scan\|boot\|sites\|record` |
283
  | Long occulters' companions | Gaia DR3 RUWE, astrometric excess noise and its significance of the stars eclipsed for months, ranked among 400 field stars within 0.15 deg matched in G and colour; EE Cep, whose disk-bearing companion is known, as the control | `seti.py dimming occulters [record] [--stars NAME ...] [--controls NAME ...] [--dg 0.3] [--dcolour 0.2] [--n-controls 100] [--radius-deg 0.15]` |
284
+ | Dark-comet candidate | MPC astrometry refitted in ASSIST with and without A2, with A1 and A2, under site weights, the sqrt(N/4) same-night deweighting of Veres et al. (2017) and each night as one position, and with each apparition left out; each apparition's offset from the gravity-only orbit of the others split along and across the apparent motion of the moving Earth, the along-track part as a clock error; every position's residuals against three orbits for the residual plot; the two orbits' separation ahead, with each orbit's prediction ellipse from its covariance; A2 refitted with one night left out at a time, with nights resampled with and without the decisive apparition held, and under other clipping thresholds, error floors and default uncertainties; the precovery frames re-measured against Gaia DR3 and set against both orbits; the known asteroids around the precovery track from SkyBoT; A2 under a night-level covariance whose shared variance is set by restricted maximum likelihood, and the error the decisive night would have to share to lose it; the positions in the precovery frames that orbits fitted without that night allow, A2 held at each value; every moving source in the whole precovery frames, linked into straight tracks, with chance tracks measured by shuffling the frame times and the completeness by injected copies of the object, and the median flux along the allowed positions and along shifted control lines; the next apparition's daily ephemeris of both orbits and the A2 it would measure without the decisive night; NEATM on NEOWISE W2 at fixed beaming parameters and under other assumptions; gravity, A2, A2 and A3, and all three terms with and without JPL's radar delays, the round trip computed leg by leg with light time and the Sun's Shapiro delay, judged by BIC on the observations every model keeps, with A3 refitted with each apparition left out | `seti.py solar_system darkcomet fetch\|thermal\|variants\|refit\|record\|precovery\|robust\|blockcov\|frames\|field\|locus\|census\|forecast\|normal\|normal-record DESIG`; `papers/dark_comet/make_numbers.py`; `papers/dark_comet/README.md` lists the paper's data files and the command behind each |
285
  | Coherent hyperbolic meteor streams | GMN yearly trajectory summaries; each sporadic hyperbolic orbit's incoming asymptote and v_inf, a 1 deg and 3 km/s neighbourhood against the 10 deg density, IAU MDC showers matched by radiant, date and speed; nulls from shuffled speeds, independent speed errors and a shared speed overestimate on the elliptic sporadics | `seti.py solar_system meteors fetch\|analyse\|record` |
286
  | Cosmic-ray doublets | Auger Phase One events above 32 EeV (Zenodo 6504276); pairs and triplets in 2 deg against 10000 time permutations, Gaia stars within 100 pc in each circle | `seti.py highenergy doublets [record] [--set phase1\|sd1500\|sd750\|inclined]` |
287
  | Clockwork flares | flare start times from the Kepler (Yang and Liu 2019) or TESS (Yang et al. 2023, `CLOCKWORK_CAT=tess`) catalogues; H-test search, a null of other stars' flare times in the same quarters or orbits, then bursts, eclipsing binaries, spacecraft timing and phase scatter | `seti.py flashes clockwork search\|null\|vet\|record` |
 
415
  | Planets on perfect circles | planets of the composite table with periods beyond 30 days and a measured eccentricity; an upper eccentricity below 0.002, with fixed values and limits set aside | `seti.py transits circles [record] [--p-min-d 30] [--tol 0.002]` |
416
  | Asteroid spins on the clock | secure LCDB rotation periods quoted to three decimals between 2 and 48 hours; a period within 0.02 per cent of a whole number of hours, against the half-hour windows and uniform fractions, the day's harmonics marked as aliases | `seti.py solar_system hourspins [record] [--tol-rel 0.0002] [--p-min-h 2] [--p-max-h 48]` |
417
  | Planets on whole days | planets of the composite table with periods of 1.5-400 days known to better than 0.00002 days; a period within 0.00002 days of a whole number, against the half-day windows and uniform fractions | `seti.py transits wholedays [record] [--tol-d 0.00002] [--p-min-d 1.5] [--p-max-d 400]` |
418
+ | Light at 12 um alone | Gaia Catalogue of Nearby Stars objects with clean W1, W3 and W4; W1-W3 five widths and five errors above the single-star locus at their BP-RP while W1-W4 stays within two widths, against the stars as far below; AllWISE flags, faint W3, a second Gaia source in the beam, a W4 excess at three errors and an excess that AllWISE's plain W1 at the 2010.5 position removes as vets | `seti.py infrared w3only [record] [--widths 5] [--errors 5] [--w4-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w3-faint 11] [--beam-arcsec 10]` |
419
  | Symmetric flares | TESS flares of Yang et al. (2023) lasting 40 minutes or more; a rise from start to peak as long as the decay within 10 per cent of the duration, or longer, counted by duration and by the star's flare count | `seti.py flashes symflares [record] [--dur-min-d 0.028] [--sym-frac 0.1]` |
420
+ | Telecom-band laser lines | NIRPS and SPIRou spectra of nearby M dwarfs; unresolved emission in the O and C/L bands recurring in the star's frame on three nights with different barycentric corrections, against the recurring dips, with sky residuals (steadier at the telescope) and features shared between stars as vets | `seti.py lasers telecom [record] [--sig 6] [--tol-kms 1.5] [--min-nights 3] [--min-berv-spread 3] [--edge 30]` |
421
  | Pulsars ticking in whole hertz | ATNF pulsars with periods quoted to eight digits or more; a spin frequency within 0.00001 Hz of a whole hertz or a period within 0.00001 ms of a whole millisecond, against the half-integer windows and uniform fractions, with rounded periods counted apart | `seti.py radio_sky wholehz [record] [--tol 0.00001] [--digits-min 8]` |
422
  | Pulsars on the hydrogen line's decimals | ATNF pulsars with periods quoted to eight digits or more; a spin frequency within one part in 100,000 of the hydrogen line's frequency scaled by a power of ten, against the half-decade windows and uniform logarithmic fractions | `seti.py radio_sky hydrogenhz [record] [--tol-rel 0.00001] [--digits-min 8]` |
423
  | Stars that stepped a magnitude between Gaia releases | Gaia DR3 sources within 100 pc whose DR2 counterpart within 0.1 arcsec differs by more than a magnitude in mean G; transit counts, variability flags, SIMBAD types, DR2's saturation above G 4 and the missing colours of sources in a bright neighbour's light as vets | `seti.py dimming releasestep [record] [--dmag 1.0] [--plx-min 10] [--match-mas 100] [--min-obs 20] [--bright-g 4]` |
424
  | Lurkers at Earth's Lagrange points | asteroids of the Small-Body Database within 0.01 au of Earth's semi-major axis with e below 0.3 and i below 30 deg; the mean longitude at epoch relative to Earth's, counted within 20 deg of L4 and L5 against the rest of the ring, each read for its arc and condition code | `seti.py solar_system lagrange [record] [--da-au 0.01] [--e-max 0.3] [--i-max-deg 30] [--half-width-deg 20]` |
425
  | Watchers of Jupiter's transits | Gaia Catalogue of Nearby Stars objects within a Sun's angular radius at Jupiter's distance of Jupiter's orbital plane, matched to GALEX within 5 arcsec at 2007.0, against the stars 1-5 deg from the plane and the band moved 2 arcmin; any planet's zone from its orbit | `seti.py neighbourhood watchers [record] [--planet jupiter] [--catalogue II/335/galex_ais] [--radius-arcsec 5] [--epoch 2007]` |
426
  | Light at 2 um alone | Gaia Catalogue of Nearby Stars objects with clean J, Ks and W1; J-Ks five widths and five errors above the single-star locus at their BP-RP while J-W1 stays within two widths, against the stars as far below; 2MASS flags and SIMBAD as vets | `seti.py infrared ksexcess [record] [--widths 5] [--errors 5] [--w1-widths 2] [--colour-min 0.5] [--colour-max 3.0]` |
427
+ | A silicon photovoltaic edge | Gaia Catalogue of Nearby Stars objects with clean J and Ks; RP-J five widths and five errors above the single-star locus at their BP-RP while J-Ks stays within two widths, against the stars as far below; 2MASS flags, Gaia neighbours in the 2MASS beam and the height above the main sequence as vets | `seti.py infrared pvedge [record] [--widths 5] [--jk-widths 2] [--emax 0.03] [--beam-arcsec 4] [--twin-mag 0.4]` |
428
  | Planets in step with their star's spin | planets of the composite table whose host carries a rotation period; an orbital period at a whole multiple of 2-20 of the rotation within 0.5 per cent, against the half-integer windows and uniform fractions, each with the source of the rotation period | `seti.py transits spinsteps [record] [--tol-rel 0.005] [--n-max 20]` |
429
  | Nearby light bluer than any star | Gaia Catalogue of Nearby Stars objects with BP-RP below -0.65; the BP/RP flux excess, the image-peak and RUWE flags, the white-dwarf probability and SIMBAD's type as vets | `seti.py ultraviolet bluest [record] [--colour-max -0.65] [--excess-max 0.2]` |
430
  | Comets pushed toward the Sun | comets and asteroids of the Small-Body Database with a negative radial non-gravitational term A1 at three sigma; the arc, condition code, transverse term and asymmetric outgassing parameter as vets | `seti.py solar_system sunward [record] [--sigma 3]` |
431
  | Galaxies warm without star formation | quiescent HECATE galaxies within 150 Mpc with GSWLC masses and rates; a 22 um luminosity above a tenth of a solar luminosity per solar mass and within a factor of three of the far-infrared, against the quiescent population, with the nuclear-activity flags and the inclination as vets | `seti.py infrared warmgalaxies [record] [--d-max-mpc 150] [--ssfr-max -11] [--heat-min -1.0] [--warm-min -0.5] [--edge-on-deg 70]` |
432
  | Stars that dimmed since Hipparcos | Hipparcos stars within 100 pc with a Gaia DR3 best neighbour; G - Hp against the running median in BP-RP, a step of 0.5 mag either way, with Hipparcos's scatter and variability, Gaia's variability flag and RUWE, SIMBAD's type, pair names and Gaia neighbours as vets | `seti.py dimming hipdim [record] [--dmag 0.5] [--plx-min 10] [--bright-g 3] [--pair-arcsec 10]` |
433
+ | Single-transit flashes in Hipparcos | Hipparcos epoch photometry of quiet stars within 100 pc; one transit 0.3 mag and five robust deviations brighter than the median against the transits as much fainter, with catalogue-wide events, recurrence, variability and RUWE as vets and the pass partner as the test of a real flash | `seti.py flashes hipflash [record] [--mag 0.3] [--sig 5] [--quiet 0.02] [--pair-days 0.02] [--plx-min 10]` |
434
  | Asteroids on polar orbits | asteroids and comets of the Small-Body Database on bound orbits within 3 deg of 90 deg inclination; those within 0.5 deg of polar against a flat density and the bands either side, each read for its arc and condition code | `seti.py solar_system polar [record] [--half-width-deg 0.5] [--band-deg 3] [--condition-max 6]` |
435
  | Stars enriched evenly in every heavy element | GALAH DR4 stars with all eleven neutron-capture elements clean; every [X/Fe] above +0.4 dex with a spread below 0.1 dex, against the stars depleted as evenly and the sample's own spread | `seti.py composition evenheavy [record] [--mean-min 0.4] [--spread-max 0.1]` |
436
  | Transits longer than the star allows | transiting planets of the composite table; a duration beyond 1.25 times the central circular maximum at the catalogued geometry, with the duration error, the sources of duration and radius and the eccentricity as vets | `seti.py transits longtransits [record] [--excess 1.25] [--err-max 0.2]` |
437
  | Gamma rays peaked like a line | 4FGL sources above 10 sigma; a log-parabola beta above 0.8 at a curvature significance above 4, against the catalogue's curvatures, with the source class and the analysis flags as vets | `seti.py highenergy gammapeak [record] [--sig-min 10] [--beta-min 0.8] [--curve-min 4]` |
438
  | Nearby stars flickering by the minute | Gaia DR3 short-timescale variables within 100 pc with characteristic frequencies above 48 cycles a day; the white-dwarf locus, SIMBAD's type, the image and RUWE flags and the flare stars' colour as vets | `seti.py flashes flicker [record] [--plx-min 10] [--freq-min 48] [--red-colour 2.0]` |
439
+ | Infrared dimming next door | Gaia Catalogue of Nearby Stars objects within 20 pc; the AllWISE profile W1 at 2010.5 against CatWISE2020's at 2015.0, a change of 0.3 mag either way, with variability flags, RUWE, SIMBAD's type, the WISE flags, CatWISE's saturation, the match separation, the proper motion and NEOWISE's single exposures of 2014-2024 holding the AllWISE W1 as vets | `seti.py infrared irdim [record] [--plx-min 50] [--dmag 0.3] [--radius-arcsec 3] [--saturation 8.5] [--match-arcsec 1.5] [--fast-mas-yr 1000] [--neowise-tol 0.15]` |
440
  | Systems turned face-on to us | non-transiting planets of the composite table with a measured inclination; an orbit within 5 deg of either pole against the share random orientations give, with the inclination error and method as vets | `seti.py transits faceon [record] [--i-max-deg 5] [--err-max-deg 5]` |
441
  | Masers at rest in the universe's frame | the 6.7 GHz methanol masers of Pestalozzi et al. (2005); each peak velocity carried to the microwave background's frame, a maser within 2 km/s of rest there against the velocities' density within 30 km/s | `seti.py radio_sky maserrest [record] [--tol-kms 2] [--window-kms 30]` |
442
  | Waste heat in HI-dark galaxies | the ALFALFA HI-dark galaxies of Leisman et al. (2017); an AllWISE source at 5 sigma in W3 or W4 within 10 arcsec of the counterpart, against the positions moved 2 arcmin, with the AGN colour and a Gaia star as vets | `seti.py infrared hidark [record] [--radius-arcsec 10] [--snr 5] [--w1w2 0.5]` |
 
457
  | Neutrinos with gamma-ray bursts | IceCube ten-year events above 10 TeV against Fermi GBM bursts; a neutrino within 100 s inside the two error circles plus a degree, against the chance rate from the event list and the circles | `seti.py highenergy nugrb [record] [--energy-min-gev 10000] [--window-s 100] [--extra-deg 1]` |
458
  | Warm stars in the Hyades | Hyades members of Hunt and Reffert (2023) with clean W1 and W3; W1-W3 five widths above the cluster's own locus, the share against the field's, with AllWISE flags and SIMBAD as vets; any cluster of the catalogue may be named | `seti.py infrared hyadeswarm [record] [--cluster Melotte_25] [--prob-min 0.5] [--widths 5] [--errors 5] [--field-share 0.0077] [--w3-err-max 0.2]` |
459
  | Resonant pairs without timing variations | Kepler planets in pairs within 2 per cent of 2:1 or 3:2; the timing scatter of each against the variation its neighbour's radius-estimated mass demands, a quiet planet below a fifth of it, with the estimated masses as the vet | `seti.py transits ttvabsent [record] [--delta-max 0.02] [--quiet-ratio 0.2] [--pval-min 0.5]` |
460
+ | Transit-timing residuals that compress | Kepler transit times of Holczer et al. (2016); the residual after a line and two sinusoids in four quantile symbols compressed with zlib, against shuffles and AR(1) surrogates, with published timing variations and the chance count as vets | `seti.py transits ttvzip [record] [--min-n 30] [--draws 300] [--seed 31]` |
461
  | Light at 3.4 um alone | Gaia Catalogue of Nearby Stars objects with clean Ks, W1 and W2; Ks-W1 five widths and five errors above the single-star locus while Ks-W2 stays within two widths, against the stars as far below; AllWISE's plain W1, its flags, 2MASS's flags and SIMBAD as vets | `seti.py infrared w1only [record] [--widths 5] [--errors 5] [--w2-widths 2] [--colour-min 0.5] [--colour-max 2.5]` |
462
  | Dark companions on perfect circles | Gaia DR3 astrometric orbits within 200 pc with periods beyond 200 days; an upper eccentricity below 0.005 against the solutions' own, with the significance as the vet | `seti.py neighbourhood darkcircles [record] [--plx-min 5] [--p-min-d 200] [--tol 0.005] [--sig-min 20]` |
463
  | Planets lapping their star's spin in whole steps | planets of the composite table whose host carries a rotation period; a rotation period at a whole multiple of 2-20 of the orbital period within 0.5 per cent, against the half-integer windows and uniform fractions, each with the source of the rotation period | `seti.py transits spinlaps [record] [--tol-rel 0.005] [--n-max 20]` |
 
502
  | Stars that changed colour since Hipparcos | Hipparcos B-V against Gaia BP-RP through the sample's own run, outliers read for variability, binarity, saturation and the spectral class | `seti.py dimming colourchange [record] [--widths 5] [--min-mag 0.2] [--bv-min -0.3] [--bv-max 2.0] [--g-sat 6] [--e-bv-max 0.03] [--slope 2] [--class-tol 0.45]` |
503
  | Eclipsing binaries on whole days | Kepler eclipsing binaries with periods on whole days, free of the ground's day aliases, against the periods' density | `seti.py flashes ebwholedays [record] [--tol-d 0.0002] [--p-max-d 50]` |
504
  | Retrograde co-orbitals of the giant planets | SBDB bodies sharing a giant planet's semi-major axis on retrograde orbits of modest eccentricity, read against the published cases and the arcs | `seti.py solar_system retroco [record] [--a-tol 0.05] [--i-min 90] [--e-max 0.5] [--arc-min-d 365]` |
505
+ | Radio sources that switched off | Compact NVSS sources of 1995 absent from the VLASS quick-look components of 2019, read against SIMBAD, bright neighbours, RACS-low and the catalogue's holes, then the later surveys, the lobes of brighter sources and the VLASS images themselves | `seti.py radio_sky switchoff [record] [--flux-min-mjy 100] [--major-max-arcsec 25] [--radius-arcsec 20] [--dec-min -40] [--hole-deg 0.25] [--b-min 10] [--bright-jy 5] [--bright-deg 0.5] [--racs-dec-max 41] [--later-arcsec 30] [--lobe-arcsec 90] [--image-sigma 10]` |
506
  | Bodies pushed out of their orbital planes | SBDB bodies whose normal non-gravitational term rivals the radial, read against jets, dark comets and arcs | `seti.py solar_system outofplane [record] [--sigma 3] [--ratio-min 0.5] [--arc-min-d 1000]` |
507
  | Gamma rays harder than any shock | 4FGL sources whose photon index is harder than any accelerator gives, read against their associations and extension | `seti.py highenergy hardgamma [record] [--index-max 1.3] [--sig-min 10]` |
508
  | Stars whose distance changed since Hipparcos | Hipparcos against Gaia parallaxes with scaled errors, outliers read for misidentification, binarity, solution quality and the Gaussian tail | `seti.py neighbourhood receded [record] [--sigma 5] [--min-mas 2] [--g-sat 6] [--f2-max 3] [--match-mag 2]` |
 
543
  | What sets the worst-fitted nearby M dwarfs apart | the XP misfits' colours, luminosity, J-Ks, speed, radial-velocity scatter and ultraviolet against peers of their colour and magnitude | `seti.py composition xpmisfits record [--controls 3000]` |
544
  | What a pile of unassociated gamma-ray sources is | a random forest on 4FGL spectral shape and variability, trained on associated pulsars, blazars and remnants, classing the clean unassociated sources of a window against the rest of the plane | `seti.py highenergy unasclass record [--l-deg 312.07] [--b-deg 0] [--radius-deg 2]` |
545
  | Fireballs the meteor cameras caught | CNEOS fireballs matched to Global Meteor Network trajectories by time and place, the camera speeds set against the satellite speeds | `seti.py solar_system fireballgmn record [--dt-s 10] [--km 300]` |
546
+ | Hosts of the hostless radio sources in the near infrared | the hostless sources against VHS, VIKING and UKIDSS, each K magnitude or survey depth turned into a redshift by the K-z relation of radio galaxies; the HSC-SSP DR3 g, r and z images where they reach | `seti.py radio_sky hostlessnir record [--arcsec 2] [--hsc-pix 0.168]` |
547
  | Spectral classes of the worst-fitted nearby M dwarfs | the XP misfits' LAMOST and SDSS spectral classes against the trait test's metal-poor verdicts | `seti.py composition misfitspectra record [--arcsec 3]` |
548
  | Gamma-ray points inside TeV glows | clean unassociated 4FGL sources in a window of the plane against the extents of the H.E.S.S. Galactic Plane Survey's sources, against the rest of the footprint | `seti.py highenergy hgpsoverlap record [--l-deg 312.07] [--radius-deg 2] [--width-factor 2]` |
549
  | Subdwarf indices of the worst-fitted nearby M dwarfs | CaH2, CaH3 and TiO5 band indices and Lepine's zeta from the misfits' LAMOST and SDSS spectra | `seti.py composition subdwarfindex record [--arcsec 3]` |
 
627
  | Nova ellipsoids | Gaia DR3 stars within 100 pc whose keyed-signal arrival from a conspicuous eruption (T CrB 1866 and 1946, GK Per 1901, V603 Aql 1918, RR Pic 1925, DQ Her 1934, CP Pup 1942, V1500 Cyg 1975, the supernovae of 1572 and 1604; `NOVA_EVENT` picks one) falls in the TESS years, matched to the TIC by CDS XMatch; lone flashes in each 2-minute light curve within 2 sigma of the arrival against the same sectors' light curves outside their windows, stars brighter than G 6 left out, counts capped at 3 | `seti.py flashes nova [--threads N]`, `seti.py flashes nova record` |
628
  | Non-thermal or recurrent lunar flashes | NELIOTA's flash lists from the tables of Liakos et al. (2020, PDF text) and (2024, arXiv HTML): id, date, class, duration, R and I with errors, selenographic position; colour temperature from R - I through the Planck ratio with Vega's colour as the zero point, against 1000-8000 K at 3 sigma; duration against 0.5 s; pairs within 1.5 deg on the Moon against 2000 permutations of the longitudes | `seti.py flashes neliota fetch\|analyse\|record` |
629
  | Stars dimmer in the infrared than their spectra allow | Gaia DR3 stars within 100 pc with RVS temperatures whose first ten GSP-Spec flags are 0 or 1, A_G below 0.05, RUWE below 1.4 and AllWISE W1 of quality A at 8-15 mag through Gaia's best neighbours; G - W1 against its median at the spectroscopic temperature, flagged where the colour temperature read from that locus is 500 K above the spectroscopic at 5 sigma, and read for a GSP-Phot or BP-RP temperature nearer the infrared colour's than the spectrum's | `seti.py infrared irdeficit [record] [--dteff-k 500] [--sigma 5] [--w1-min 8] [--w1-max 15] [--ag-max 0.05] [--ruwe-max 1.4] [--gspspec-flag-max 1]` |
630
+ | Warm stars in Earth's transit zone | Gaia Catalogue of Nearby Stars objects with its WISE photometry, single by RUWE and IPD, W3 at S/N 10 or W4 at S/N 5; W1-W3 and W1-W4 more than five robust widths and three errors above the single-star locus at the same BP-RP, a warm star kept only when AllWISE's plain W1 at the 2010.5 position keeps the excess; the warm share within 0.264 deg of the ecliptic against the share 1-5 deg away | `seti.py infrared etzwarm [record] [--planet jupiter] [--zone-deg 0.264] [--control-min-deg 1] [--control-max-deg 5] [--widths 5] [--errors 3] [--w3-err-max 0.1] [--w4-err-max 0.2]` |
631
  | Light at 4.6 um alone | Gaia Catalogue of Nearby Stars objects with WISE W1 8-14, W2 above 7.5 and W1, W2 and W3 measured to 0.05, 0.05 and 0.1 mag; W1-W2 more than five robust widths and five errors above the single-star locus at the same BP-RP with W1-W3 within two widths of its own, against the stars as far below; candidates read for AllWISE contamination, extension and variability flags and in SIMBAD | `seti.py infrared w2only [record] [--widths 5] [--errors 5] [--w3-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w2-min 7.5]` |
632
  | Sources shining in one filter only | Pan-STARRS1 DR1 (VizieR II/349) objects detected five or more times in one filter and never in the other four, brighter than g or r 19, i 18.5, z 18 or y 17, beyond what any stellar colour leaves undetected in the neighbouring filters | `seti.py infrared onefilter [record] [--limits 19 19 18.5 18 17] [--n-min 5]` |
633
  | Dwarfs whose 12 um output changed between 1983 and 2010 | Gaia DR3 stars within 100 pc at G below 8 and RUWE below 1.4; by CDS XMatch, IRAS PSC 12 um of high quality within 45 arcsec of the 1983 position and clean unsaturated AllWISE W3 within 3 arcsec of the 2010 position; the IRAS flux as a magnitude (zero point 28.3 Jy) against W3, flagged 1 mag from the median offset and read for a Gaia star within 45 arcsec and 2 mag in G, inside IRAS's beam and outside W3's | `seti.py infrared iraswise [record] [--g-max 8] [--ruwe-max 1.4] [--iras-arcsec 45] [--wise-arcsec 3] [--dmag 1] [--blend-dmag 2]` |
RESULTS.md CHANGED
@@ -4,7 +4,7 @@ Generated by `python -I seti.py store table` from the Searched table of `LEDGER.
4
 
5
  A run is one row of the store's `searches` table. Its sample is the number of things it searched (`n_targets`) in the unit named (`n_unit`), and samples in different units are never added. Its rows are its rows in the `coverage` table, one for each target for which it recorded a statistic, a limit or a vet; many runs record only their flagged targets, so a run's rows are not its sample. A vetted row carries the codes of `README.md` for the explanations that removed it.
6
 
7
- 511 runs of 396 approaches; 513589 per-target rows over 432164 distinct target identifiers.
8
 
9
  ## Curved drift tracks, radio
10
 
@@ -1738,9 +1738,9 @@ A run is one row of the store's `searches` table. Its sample is the number of th
1738
 
1739
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry; SIMBAD
1740
 
1741
- **Runs.** `etz_warm_stars`: 911 stars, 7 per-target rows, 7 vetted
1742
 
1743
- **Result.** 7 warm of 911 stars in the zone against 12.3 expected from the 186 of 13800 stars 1-5 deg away (p 0.96); the seven are bright G and K dwarfs, a giant and a double star (`etz_warm_stars`)
1744
 
1745
  ## Radio from Earth's transit zone
1746
 
@@ -2026,9 +2026,9 @@ A run is one row of the store's `searches` table. Its sample is the number of th
2026
 
2027
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry: 3510 stars within 100 pc at BP-RP 0.5-2.5 with W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, W1-W3 more than five widths and five errors above the single-star locus at their colour with W1-W4 within two widths of its own, against the stars as far below; each read in AllWISE for flags and faint W3, in Gaia for a second source in the W3 beam and for a W4 excess at three errors
2028
 
2029
- **Runs.** `w3_only_excess`: 3,510 stars, 27 per-target rows, 9 vetted
2030
 
2031
- **Result.** 27 above against 2 below; 6 carry AllWISE flags, 3 have a W4 excess at three errors (dust), and 18 K and M dwarfs with W3 of 7.6-8.8 mag and a 12 um excess of 0.3-0.5 mag remain unexplained, their W4 excess of 0.1-0.5 mag at one to three errors too coarse to separate warm dust from a narrow emitter
2032
 
2033
  ## Symmetric flares
2034
 
@@ -2170,9 +2170,9 @@ A run is one row of the store's `searches` table. Its sample is the number of th
2170
 
2171
  **Data.** Gaia Catalogue of Nearby Stars within 20 pc with AllWISE W1 8-15: 1004 stars matched to AllWISE at 2010.5 and CatWISE2020 at 2015.0 within 3 arcsec, those whose profile W1 differs by more than 0.3 mag between the two means, against the stars that brightened as much; each read for Gaia's variability flag, RUWE and image flags, SIMBAD's type, the WISE flags, CatWISE's saturation brighter than 8.5 mag, the match separation and the proper motion, since a star moving a second a year is split between the epochs of CatWISE's coadds
2172
 
2173
- **Runs.** `allwise_catwise_w1_change`: 1,004 stars, 94 per-target rows, 88 vetted
2174
 
2175
- **Result.** 92 fainter in CatWISE against 2 brighter: 14 variables, 29 blends, 29 saturated or flagged, 16 matched to another source or split by their motion; 6 M6-L3 dwarfs moving 0.4-0.9 arcsec a year, fainter by 0.5-0.9 mag, remain unexplained and carry the fast movers' signature
2176
 
2177
  ## Systems turned face-on to us
2178
 
@@ -2514,9 +2514,9 @@ A run is one row of the store's `searches` table. Its sample is the number of th
2514
 
2515
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry: 175 stars with W1 and W3 or W4 within 0.051 deg of Jupiter's orbital plane, the band that sees Jupiter transit the Sun, against the 13736 stars 1-5 deg from the plane; SIMBAD
2516
 
2517
- **Runs.** `jupiter_zone_warm_stars`: 175 stars, 3 per-target rows, 3 vetted
2518
 
2519
- **Result.** 3 warm (HD 13997, HD 112250 and a G 14.9 star with W3 and W4 excess) against 2.36 expected from the band's share (p 0.42); with the ultraviolet count of the zone's stars this closes the Jupiter-zone programme (`jupiter_zone_warm_stars`)
2520
 
2521
  ## Two pulsars at one spot
2522
 
@@ -2688,19 +2688,19 @@ A run is one row of the store's `searches` table. Its sample is the number of th
2688
 
2689
  ## Radio sources that switched off
2690
 
2691
- **Data.** NVSS (VizieR VIII/65): 37223 compact sources above 100 mJy north of -40 deg and more than 10 deg from the Galactic plane, those without a VLASS epoch-1 quick-look component (J/ApJS/255/30) within 20 arcsec; SIMBAD, the artefact zones of sources above 5 Jy, RACS-low of 2019-2020 and the component list's own holes
2692
 
2693
- **Runs.** `nvss_vlass_switchoffs`: 37,223 sources, 281 per-target rows, 257 vetted
2694
 
2695
- **Result.** 281 missing: 132 of known types, 12 beside sources above 5 Jy, 113 still shining in RACS-low or in holes of the component list; 24 remain, north of RACS-low's reach or unmatched in it, with VLASS components around them (`nvss_vlass_switchoffs`)
2696
 
2697
  ## Bodies pushed out of their orbital planes
2698
 
2699
  **Data.** JPL Small-Body Database: 113 comets and 10 asteroids with normal and radial non-gravitational terms, those whose normal term at 3 sigma exceeds half the radial; the ratio's distribution has a median of 0.19 and a 90th percentile of 0.86
2700
 
2701
- **Runs.** `sbdb_out_of_plane`: 123 bodies, 28 per-target rows, 28 vetted
2702
 
2703
- **Result.** 28: 21 comets, whose polar jets push across the plane, 5 on arcs under 1000 d; the two near-Earth asteroids 2016 GW221 and 2013 XY20, whose normal terms rest on 209 and 72 observations, are dark comets of Seligman et al. (2024); none unexplained (`sbdb_out_of_plane`)
2704
 
2705
  ## Gamma rays harder than any shock
2706
 
@@ -2922,9 +2922,9 @@ A run is one row of the store's `searches` table. Its sample is the number of th
2922
 
2923
  **Data.** the CNEOS fireball database through the JPL fireball API: 360 fireballs with a location and a pre-entry velocity vector, taken from Earth-fixed axes to barycentric axes with Earth's gravity removed and Earth's velocity added
2924
 
2925
- **Runs.** `cneos_hyperbolic_fireballs`: 360 fireballs, 8 per-target rows, 5 vetted
2926
 
2927
- **Result.** 8 arrive faster than the Sun's escape speed at Earth's distance; redrawn with CNEOS's errors against ground-based networks (Peña-Asensio et al. 2025), the five before 2018 or at the threshold are bound in 2 to 48 per cent of the draws, among them IM1 (2014-01-08, 60.6 km/s heliocentric, bound in 2 per cent) and IM2 (2017-03-09, 21 per cent); three since 2018 are bound in none of 20,000, 2021-05-06 (43.7 km/s), 2022-07-28 (47.4 km/s, CNEOS-22) and 2026-04-01 (51.8 km/s), and are not explained (`cneos_hyperbolic_fireballs`)
2928
 
2929
  ## The temperate rocky-planet hosts in every band
2930
 
@@ -3028,7 +3028,7 @@ A run is one row of the store's `searches` table. Its sample is the number of th
3028
 
3029
  **Runs.** `crates_hostless_nir`: 22 sources, 22 per-target rows
3030
 
3031
- **Result.** none has a near-infrared counterpart; the 15 the surveys cover are fainter than K 18.1-18.2, which on the K-z relation puts their hosts beyond redshift 1.5, and 7 lie outside the surveys (`crates_hostless_nir`)
3032
 
3033
  ## Spectral classes of the worst-fitted nearby M dwarfs
3034
 
@@ -3173,3 +3173,35 @@ A run is one row of the store's `searches` table. Its sample is the number of th
3173
  **Runs.** `binaries_eblm_known_orbits`: 37 binaries, 38 per-target rows, 6 vetted
3174
 
3175
  **Result.** four companions at 5 sigma or more on their own nulls, each summit at an offset of +1.0 km/s set against 10,000 draws of each null with a Gumbel law for the tail: TOI-1338's (ESPRESSO) at a false-alarm probability of 1e-11, J0310-31's at 8e-12, HD 4875's (J0050-18) at 1e-8 and J2101-45's at 4e-9, the last at 1.5e-7 (5.1 sigma) across the survey's 35 binaries; with the companion's systemic offset free, K2 of 77.27 +- 0.10 +- 0.15, 88.12 +- 0.18 +- 0.34 and 75.29 +- 0.30 +- 0.87 km/s (statistical, then systematic from the series' parts by date and its seasons) for the three with published values (77.16 +- 0.48, 88.27 +- 0.46 and 75.13 +- 0.16), masses within 0.6 per cent of the published dynamical ones and the companions' lines +1.05 to +1.25 km/s from the primary's systemic velocity, which held at zero moves K2 by up to 0.55 km/s; J2101-45 at K2 65.41 +- 0.32 +- 0.32 km/s with minimum masses of 1.415 and 0.552 Msun, held under 3 and 8 principal components, either half of the band and an L 98-59 template and recovered when injected into its spectra; J0649-27, J0825-67 and J1141-37 candidates at 3.9, 3.6 and 3.3 sigma alone and 3.0, 2.6 and 2.1 across the survey; TOI-1338's 73 HARPS spectra at 2.8 sigma and J1928-38's 74 at 0.3 at their published K2; J0543-57 and J2126-28 too thin to search (`binaries_eblm_known_orbits`)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  A run is one row of the store's `searches` table. Its sample is the number of things it searched (`n_targets`) in the unit named (`n_unit`), and samples in different units are never added. Its rows are its rows in the `coverage` table, one for each target for which it recorded a statistic, a limit or a vet; many runs record only their flagged targets, so a run's rows are not its sample. A vetted row carries the codes of `README.md` for the explanations that removed it.
6
 
7
+ 517 runs of 400 approaches; 514270 per-target rows over 432573 distinct target identifiers.
8
 
9
  ## Curved drift tracks, radio
10
 
 
1738
 
1739
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry; SIMBAD
1740
 
1741
+ **Runs.** `etz_warm_stars`: 911 stars, 0 per-target rows
1742
 
1743
+ **Result.** 0 warm of 911 stars in the zone against 2.31 expected from the 35 of 13800 stars 1-5 deg away (p 1), with every colour taken from AllWISE's plain W1: the proper-motion-fitted W1 of the Catalogue of Nearby Stars runs 0.3-1.1 mag faint for bright and fast stars and made 2712 stars look warm (`etz_warm_stars`)
1744
 
1745
  ## Radio from Earth's transit zone
1746
 
 
2026
 
2027
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry: 3510 stars within 100 pc at BP-RP 0.5-2.5 with W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, W1-W3 more than five widths and five errors above the single-star locus at their colour with W1-W4 within two widths of its own, against the stars as far below; each read in AllWISE for flags and faint W3, in Gaia for a second source in the W3 beam and for a W4 excess at three errors
2028
 
2029
+ **Runs.** `w3_only_excess`: 3,510 stars, 27 per-target rows, 27 vetted
2030
 
2031
+ **Result.** 27 above against 2 below, all artefacts: 6 carry AllWISE flags and the rest lose their excess with AllWISE's plain W1, the catalogue's proper-motion-fitted W1 being 0.3-0.5 mag faint for these K and M dwarfs moving 0.4-1.0 arcsec a year (`w3_only_excess`)
2032
 
2033
  ## Symmetric flares
2034
 
 
2170
 
2171
  **Data.** Gaia Catalogue of Nearby Stars within 20 pc with AllWISE W1 8-15: 1004 stars matched to AllWISE at 2010.5 and CatWISE2020 at 2015.0 within 3 arcsec, those whose profile W1 differs by more than 0.3 mag between the two means, against the stars that brightened as much; each read for Gaia's variability flag, RUWE and image flags, SIMBAD's type, the WISE flags, CatWISE's saturation brighter than 8.5 mag, the match separation and the proper motion, since a star moving a second a year is split between the epochs of CatWISE's coadds
2172
 
2173
+ **Runs.** `allwise_catwise_w1_change`: 1,004 stars, 94 per-target rows, 94 vetted
2174
 
2175
+ **Result.** 92 fainter in CatWISE against 2 brighter: 14 variables, 29 blends, 35 saturated or flagged, 16 matched to another source or split by their motion; the 6 M6-L3 dwarfs moving 0.4-0.9 arcsec a year hold their AllWISE W1 within 0.15 mag across NEOWISE's single exposures of 2014-2024, so CatWISE's proper-motion fit, not the stars, is faint (`allwise_catwise_w1_change`)
2176
 
2177
  ## Systems turned face-on to us
2178
 
 
2514
 
2515
  **Data.** Gaia Catalogue of Nearby Stars with its WISE photometry: 175 stars with W1 and W3 or W4 within 0.051 deg of Jupiter's orbital plane, the band that sees Jupiter transit the Sun, against the 13736 stars 1-5 deg from the plane; SIMBAD
2516
 
2517
+ **Runs.** `jupiter_zone_warm_stars`: 175 stars, 1 per-target row, 1 vetted
2518
 
2519
+ **Result.** 1 warm, a G 14.9 star with a W4 excess, against 0.41 expected from the band's share (p 0.34), with every colour taken from AllWISE's plain W1; with the ultraviolet count of the zone's stars this closes the Jupiter-zone programme (`jupiter_zone_warm_stars`)
2520
 
2521
  ## Two pulsars at one spot
2522
 
 
2688
 
2689
  ## Radio sources that switched off
2690
 
2691
+ **Data.** NVSS (VizieR VIII/65): 37223 compact sources above 100 mJy north of -40 deg and more than 10 deg from the Galactic plane, those without a VLASS epoch-1 quick-look component (J/ApJS/255/30) within 20 arcsec; SIMBAD, the artefact zones of sources above 5 Jy, RACS-low of 2019-2020 and the component list's own holes; then RACS-mid, RACS-high, RACS-low3 and LoTSS DR2 within 30 arcsec, RACS-mid and TGSS within 90 arcsec for the lobes of brighter sources, and the VLASS quick-look images at the CADC
2692
 
2693
+ **Runs.** `nvss_vlass_switchoffs`: 37,223 sources, 281 per-target rows, 281 vetted
2694
 
2695
+ **Result.** 281 missing, all explained: 132 of known types, 12 beside sources above 5 Jy, 130 still shining in a later survey, in the component list's holes or above 10 sigma in the VLASS images themselves (the four north of +70 deg at 75-223 mJy across all three epochs), and 7 hotspots of bright doubles such as 3C 192, 3C 263 and 3C 382, catalogued 54-80 arcsec away as one source (`nvss_vlass_switchoffs`)
2696
 
2697
  ## Bodies pushed out of their orbital planes
2698
 
2699
  **Data.** JPL Small-Body Database: 113 comets and 10 asteroids with normal and radial non-gravitational terms, those whose normal term at 3 sigma exceeds half the radial; the ratio's distribution has a median of 0.19 and a 90th percentile of 0.86
2700
 
2701
+ **Runs.** `sbdb_out_of_plane`: 123 bodies, 28 per-target rows, 28 vetted; `darkcomet_normal_2013_xy20`: 1 asteroid, 1 per-target row, 1 vetted; `darkcomet_normal_2016_gw221`: 1 asteroid, 1 per-target row, 1 vetted
2702
 
2703
+ **Result.** 28: 21 comets, whose polar jets push across the plane, 5 on arcs under 1000 d; the two near-Earth asteroids 2016 GW221 and 2013 XY20 are dark comets of Seligman et al. (2024); refitted in ASSIST, 2016 GW221 keeps A3 +3.4e-11 au/d^2 at 8.1 sigma with site weights and 3.9 sigma with each night as one position once JPL's Arecibo delay of 2019 is fitted to 0.1 us, at 4.7 sigma or more with any apparition left out, while 2013 XY20's A3 of 4.3 sigma with site weights falls to 2.5 with nights and vanishes without its 2019 apparition; none unexplained (`sbdb_out_of_plane`, `darkcomet_normal_2016_gw221`, `darkcomet_normal_2013_xy20`)
2704
 
2705
  ## Gamma rays harder than any shock
2706
 
 
2922
 
2923
  **Data.** the CNEOS fireball database through the JPL fireball API: 360 fireballs with a location and a pre-entry velocity vector, taken from Earth-fixed axes to barycentric axes with Earth's gravity removed and Earth's velocity added
2924
 
2925
+ **Runs.** `cneos_hyperbolic_fireballs`: 360 fireballs, 8 per-target rows, 6 vetted
2926
 
2927
+ **Result.** 8 arrive faster than the Sun's escape speed at Earth's distance; redrawn with CNEOS's errors against ground-based networks (Peña-Asensio et al. 2025), the five before 2018 or at the threshold are bound in 2 to 48 per cent of the draws, among them IM1 (2014-01-08, 60.6 km/s heliocentric, bound in 2 per cent) and IM2 (2017-03-09, 21 per cent); 2026-04-01, 51.8 km/s heliocentric from CNEOS and the Polar-IM of Cloete and Loeb (2026), is 41.5 and 41.1 km/s on the two velocities Silber et al. (2026) triangulate from GOES-East's lightning mapper and MTG-I1's lightning imager, 18 per cent slower, below the 42.1 km/s escape speed and hyperbolic in 35 per cent of draws within their errors; 2021-05-06 (43.7 km/s) and 2022-07-28 (47.4 km/s, CNEOS-22) are bound in none of 20,000 and are not explained (`cneos_hyperbolic_fireballs`)
2928
 
2929
  ## The temperate rocky-planet hosts in every band
2930
 
 
3028
 
3029
  **Runs.** `crates_hostless_nir`: 22 sources, 22 per-target rows
3030
 
3031
+ **Result.** none has a near-infrared counterpart; the 15 the surveys cover are fainter than K 18.1-18.2, which on the K-z relation puts their hosts beyond redshift 1.5, and 7 lie outside the surveys; HSC-SSP DR3 covers J000744+022626 and J231637+015200 and holds nothing within an arcsecond at S/N 4 or more in g, r or z, to about r 26 (`crates_hostless_nir`)
3032
 
3033
  ## Spectral classes of the worst-fitted nearby M dwarfs
3034
 
 
3173
  **Runs.** `binaries_eblm_known_orbits`: 37 binaries, 38 per-target rows, 6 vetted
3174
 
3175
  **Result.** four companions at 5 sigma or more on their own nulls, each summit at an offset of +1.0 km/s set against 10,000 draws of each null with a Gumbel law for the tail: TOI-1338's (ESPRESSO) at a false-alarm probability of 1e-11, J0310-31's at 8e-12, HD 4875's (J0050-18) at 1e-8 and J2101-45's at 4e-9, the last at 1.5e-7 (5.1 sigma) across the survey's 35 binaries; with the companion's systemic offset free, K2 of 77.27 +- 0.10 +- 0.15, 88.12 +- 0.18 +- 0.34 and 75.29 +- 0.30 +- 0.87 km/s (statistical, then systematic from the series' parts by date and its seasons) for the three with published values (77.16 +- 0.48, 88.27 +- 0.46 and 75.13 +- 0.16), masses within 0.6 per cent of the published dynamical ones and the companions' lines +1.05 to +1.25 km/s from the primary's systemic velocity, which held at zero moves K2 by up to 0.55 km/s; J2101-45 at K2 65.41 +- 0.32 +- 0.32 km/s with minimum masses of 1.415 and 0.552 Msun, held under 3 and 8 principal components, either half of the band and an L 98-59 template and recovered when injected into its spectra; J0649-27, J0825-67 and J1141-37 candidates at 3.9, 3.6 and 3.3 sigma alone and 3.0, 2.6 and 2.1 across the survey; TOI-1338's 73 HARPS spectra at 2.8 sigma and J1928-38's 74 at 0.3 at their published K2; J0543-57 and J2126-28 too thin to search (`binaries_eblm_known_orbits`)
3176
+
3177
+ ## A silicon photovoltaic edge
3178
+
3179
+ **Data.** Gaia Catalogue of Nearby Stars with its 2MASS photometry: 132,153 single-looking stars at BP-RP 0.5-3.0 with J and Ks to 0.03 mag, RP-J five locus widths and five errors above the running median at their colour with J-Ks on its own locus, against the stars as far below; 2MASS flags, Gaia neighbours within 4 arcsec and the height above the main sequence
3180
+
3181
+ **Runs.** `pv_edge_rp_j`: 132,153 stars, 574 per-target rows, 454 vetted
3182
+
3183
+ **Result.** 574 above against 16 below: 422 blends inside the 2MASS beam, 2 with 2MASS flags, 30 twins above the main sequence; 120 left, 36 of them more than a magnitude below the main sequence where subdwarfs and white dwarfs beside M dwarfs lie and the rest on it; RP-J at fixed BP-RP also rises with metallicity, so photometry alone does not separate a collector from a metal-rich star (`pv_edge_rp_j`)
3184
+
3185
+ ## Single-transit flashes in Hipparcos
3186
+
3187
+ **Data.** Hipparcos epoch photometry of the 12,589 stars within 100 pc with a Gaia DR3 best neighbour and a scatter below 0.02 mag: a clean transit 0.3 mag and five robust deviations brighter than the star's median, against the transits as much fainter; catalogue-wide events, recurrence, Hipparcos's and SIMBAD's variability and RUWE as vets, and the pass partner 20.6 minutes away through the other field of view
3188
+
3189
+ **Runs.** `hipparcos_single_flashes`: 12,589 stars, 85 per-target rows, 85 vetted
3190
+
3191
+ **Result.** 34 stars brighter against 51 fainter: 14 and 22 variables, 2 and 10 catalogue-wide events; 18 unexplained against 19, and the pass partner shares none of the 18, so the single brighter transits are the photometric outliers the fainter side shows as often (`hipparcos_single_flashes`)
3192
+
3193
+ ## Transit-timing residuals that compress
3194
+
3195
+ **Data.** Holczer et al. (2016) Kepler transit times: 1552 KOIs with 30 or more clean times, a line and the two strongest sinusoids removed, the residual in four quantile symbols compressed with zlib against 300 shuffles and 300 first-order autoregressive surrogates at its own lag-one correlation
3196
+
3197
+ **Runs.** `kepler_ttv_compressibility`: 1,552 KOIs, 2 per-target rows, 2 vetted
3198
+
3199
+ **Result.** 2 below both nulls at p 0.0033 against 0.02 by chance: KOI-984.01, a published large timing variation with reduced chi2 13 after the sinusoids, and KOI-1809.02, 93 bytes against 98 shuffled, at the chance count; 0.8 per cent below 0.01 against shuffles alone (`kepler_ttv_compressibility`)
3200
+
3201
+ ## Telecom-band laser lines
3202
+
3203
+ **Data.** the shoreline programme's cached NIRPS and SPIRou spectra: 852 spectra of 19 instrument-star groups of nearby M dwarfs; unresolved emission above six local deviations at 1260-1330 and 1530-1625 nm, Paschen beta masked, recurring within 1.5 km/s in the star's frame on three or more nights whose barycentric corrections spread over 3 km/s, against the dips the same test finds
3204
+
3205
+ **Runs.** `telecom_band_lasers`: 19 instrument-star groups, 27 per-target rows, 27 vetted
3206
+
3207
+ **Result.** 27 recurring peaks against 204 recurring dips: 16 hold their wavelength better at the telescope than in the star (sky emission the subtraction left), 2 recur in other stars; the 9 left, 6 of them in L 98-59 and TOI-1078 and 3 in TRAPPIST-1, are fewer than the dips no laser makes (`telecom_band_lasers`)
coverage.db CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:e9b756420fa3681236f2f524d5a06ff66151e633ab4dee907f657aa931fe863d
3
- size 109514752
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2afbf0e92ca54195eaf7c5f6054a9d287f4f9acd02a0b38f5502c3414ea1870c
3
+ size 110460928
setitools/flashes.py CHANGED
@@ -4907,7 +4907,84 @@ def chirps_main(record=False, rate_max=60.0, rate_min=1.0, p_max=1e-12, tmag_max
4907
  print("recorded")
4908
 
4909
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4910
  APPROACHES = {
 
4911
  "chirps": (lambda: core.run_cli(chirps_main), chirps_DOC),
4912
  "tones": (lambda: core.run_cli(tones_main), tones_DOC),
4913
  "flareecho": (lambda: core.run_cli(flareecho_main), flareecho_DOC),
 
4907
  print("recorded")
4908
 
4909
 
4910
+ hipflash_DOC = r"""Single-transit brightenings in Hipparcos epoch photometry: stars within 100 pc with a Gaia DR3 best neighbour and a robust scatter below 0.02 mag, a clean transit brighter than the star's median by 0.3 mag and five robust deviations, against the transits as much fainter, the mirror; each read for a catalogue-wide event (two or more other stars within half an hour, the satellite's own), a recurrence on the same star, Hipparcos's variability type, SIMBAD's type and RUWE, and for the pass partner 20.6 minutes away, which sees the same star through the other field of view and shares a real flash.
4911
+
4912
+ python -I seti.py flashes hipflash [record] [--mag 0.3] [--sig 5] [--quiet 0.02] [--pair-days 0.02] [--plx-min 10]"""
4913
+
4914
+
4915
+ def hipflash_main(record=False, mag=0.3, sig=5.0, quiet=0.02, pair_days=0.02, plx_min=10.0):
4916
+ from collections import Counter
4917
+ from setitools import dimming
4918
+ hep = dimming.hipparcos_read_hep()
4919
+ g = core.gaia("SELECT h.original_ext_source_id AS hip, g.source_id, g.parallax, g.bp_rp, g.ruwe, g.phot_variable_flag "
4920
+ "FROM gaiadr3.hipparcos2_best_neighbour AS h JOIN gaiadr3.gaia_source AS g ON h.source_id = g.source_id WHERE g.parallax > %g" % plx_min)
4921
+ near = {int(r["hip"]): r for r in g}
4922
+ events_all, cand, n_quiet = {+1: [], -1: []}, {+1: [], -1: []}, 0
4923
+ for hip, s in hep.items():
4924
+ t, m, q = (np.array(s[k]) for k in ("t", "m", "q"))
4925
+ ok = (q & dimming.hipparcos_BAD) == 0
4926
+ t, m = t[ok], m[ok]
4927
+ if len(t) < 40:
4928
+ continue
4929
+ med = float(np.median(m))
4930
+ sd = float(1.4826 * np.median(np.abs(m - med)))
4931
+ quiet_star = hip in near and sd < quiet
4932
+ n_quiet += quiet_star
4933
+ for sign in (+1, -1):
4934
+ d = sign * (med - m)
4935
+ hit = d > max(sig * sd, mag)
4936
+ events_all[sign] += list(t[hit])
4937
+ if quiet_star and hit.any():
4938
+ i = int(np.argmax(np.where(hit, d, -np.inf)))
4939
+ partners = np.nonzero((np.abs(t - t[i]) < pair_days) & (np.arange(len(t)) != i))[0]
4940
+ cand[sign].append(dict(hip=hip, t=float(t[i]), d=float(d[i]), sd=sd, partners=int(partners.size), n_hits=int(hit.sum()),
4941
+ shared=bool(partners.size) and bool(np.any(sign * (med - m[partners]) > 0.5 * d[i])), vtype=s["vtype"],
4942
+ gaia=near[hip]["source_id"], ruwe=float(near[hip]["ruwe"] or 0)))
4943
+ sim = {}
4944
+ hips = sorted({c["hip"] for k in cand for c in cand[k]})
4945
+ for k in range(0, len(hips), 300):
4946
+ for r in core.simbad("SELECT i.id, b.main_id, b.otype FROM ident AS i JOIN basic AS b ON i.oidref = b.oid WHERE i.id IN (%s)" % ",".join("'HIP %d'" % h for h in hips[k:k + 300])):
4947
+ sim[int(r["id"].split()[-1])] = (" ".join(str(r["main_id"]).split()), str(r["otype"]).strip())
4948
+ for sign in (+1, -1):
4949
+ ev = np.sort(np.array(events_all[sign]))
4950
+ for c in cand[sign]:
4951
+ c["same_time"] = int(np.searchsorted(ev, c["t"] + pair_days) - np.searchsorted(ev, c["t"] - pair_days)) - 1
4952
+ c["simbad"] = sim.get(c["hip"], ("", ""))
4953
+ ot = c["simbad"][1]
4954
+ c["vet"] = ("field-event" if c["same_time"] >= 2 else "variable-star" if c["n_hits"] > 1 or c["vtype"] in ("P", "D", "M", "U") else
4955
+ "flare" if ot in ("UV*", "Fl*") else "variable-star" if any(ot.startswith(x) for x in dimming.hipparcos_SIMBAD_EXPLAINED) else
4956
+ "binary" if c["ruwe"] > 1.4 else None)
4957
+ left = {sign: [c for c in cand[sign] if c["vet"] is None] for sign in (+1, -1)}
4958
+ print("%d quiet stars within %g pc; transits %.1f mag and %g deviations brighter on %d stars, fainter on %d" % (
4959
+ n_quiet, 1000 / plx_min, mag, sig, len(cand[1]), len(cand[-1])))
4960
+ for sign, name in ((+1, "brighter"), (-1, "fainter")):
4961
+ print("%s: %s; %d unexplained, %d shared by the pass partner" % (name, dict(Counter(c["vet"] for c in cand[sign] if c["vet"])), len(left[sign]),
4962
+ sum(c["shared"] for c in left[sign])))
4963
+ for c in sorted(left[sign], key=lambda c: -c["d"])[:20]:
4964
+ print(" HIP %d %-24s %-5s %+.2f mag (scatter %.3f) on JD %.4f, pass partner %s" % (
4965
+ c["hip"], c["simbad"][0][:24], c["simbad"][1][:5], -sign * c["d"], c["sd"], c["t"] + 2440000.0,
4966
+ "shares" if c["shared"] else ("does not" if c["partners"] else "missing")))
4967
+ # unshared single transits are photometric outliers when the brighter ones are no commoner than the fainter
4968
+ mirror = len(left[1]) <= len(left[-1]) + 2 * math.sqrt(max(len(left[-1]), 1))
4969
+ if record:
4970
+ core.record_run(
4971
+ "hipparcos_single_flashes", "Single-transit flashes in Hipparcos", "Hipparcos epoch photometry (hep); Gaia DR3 hipparcos2_best_neighbour; SIMBAD",
4972
+ "%d stars within %g pc with Hipparcos scatter below %g mag" % (n_quiet, 1000 / plx_min, quiet), os.path.abspath(__file__), "hipflash",
4973
+ n_quiet, "stars", dict(mag=mag, sig=sig, quiet=quiet, pair_days=pair_days, plx_min=plx_min),
4974
+ dict(brighter=len(cand[1]), fainter=len(cand[-1]), unexplained_brighter=len(left[1]), unexplained_fainter=len(left[-1])),
4975
+ "a transit %.1f mag and %g robust deviations from the median of a star steady to %g mag" % (mag, sig, quiet),
4976
+ "%d brighter against %d fainter; unexplained %d against %d, %d of the brighter shared by the pass partner" % (
4977
+ len(cand[1]), len(cand[-1]), len(left[1]), len(left[-1]), sum(c["shared"] for c in left[1])),
4978
+ [dict(target="hip:%d#%s" % (c["hip"], "brighter" if sign > 0 else "fainter"), stat=round(-sign * c["d"], 3), unit="mag from the median, one transit",
4979
+ vet=c["vet"] or ("chance-rate" if mirror and not c["shared"] else None),
4980
+ note="JD %.4f; scatter %.3f; %d other stars within %g d; pass partner %s; SIMBAD %s" % (
4981
+ c["t"] + 2440000.0, c["sd"], c["same_time"], pair_days, "shares" if c["shared"] else ("does not" if c["partners"] else "missing"), c["simbad"]))
4982
+ for sign in (+1, -1) for c in cand[sign]])
4983
+ print("recorded")
4984
+
4985
+
4986
  APPROACHES = {
4987
+ "hipflash": (lambda: core.run_cli(hipflash_main), hipflash_DOC),
4988
  "chirps": (lambda: core.run_cli(chirps_main), chirps_DOC),
4989
  "tones": (lambda: core.run_cli(tones_main), tones_DOC),
4990
  "flareecho": (lambda: core.run_cli(flareecho_main), flareecho_DOC),
setitools/infrared.py CHANGED
@@ -3183,7 +3183,7 @@ def bigdwarfs_main(record=False, ratio=1.2, sigma=3.0, logg_min=4.0, plx_min=10.
3183
  print("recorded")
3184
 
3185
 
3186
- etzwarm_DOC = r"""Warm stars in Earth's transit zone: Gaia Catalogue of Nearby Stars objects (probability above 0.9, not white dwarfs, RUWE below 1.4, one IPD peak) with WISE W1 and a W3 or W4 detection at S/N 10 or 5, whose W1-W3 or W1-W4 colour lies more than five robust widths and three errors above the locus of single stars of the same BP-RP; the share of such stars within 0.264 deg of the ecliptic, where Earth's transits across the Sun are seen, against the share 1-5 deg away. A watcher of Earth's transits with a civilisation's waste heat would raise the share in the zone.
3187
 
3188
  With `--planet NAME` the zone is that planet's transit zone, the Sun's angular radius at the planet's distance either side of its orbital plane, where a watcher sees the giant planet rather than Earth, and the control band is measured from that plane.
3189
 
@@ -3206,7 +3206,7 @@ def etzwarm_main(record=False, planet="", zone_deg=0.264, control_min_deg=1.0, c
3206
  x, y, z = math.cos(de) * math.cos(ra), math.cos(de) * math.sin(ra), math.sin(de)
3207
  ye, ze = y * math.cos(eps) + z * math.sin(eps), -y * math.sin(eps) + z * math.cos(eps)
3208
  return abs(math.degrees(math.asin(max(-1.0, min(1.0, x * normal[0] + ye * normal[1] + ze * normal[2])))))
3209
- rows = catalogues.gcns("source_id, ra, dec, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, ruwe, ipd_frac_multi_peak, w1mpro_pm_wise, "
3210
  "w1sigmpro_pm_wise, w3mpro_wise, w3sigmpro_wise, w4mpro_wise, w4sigmpro_wise",
3211
  "gcns_prob > 0.9 AND wd_prob < 0.1 AND ruwe < 1.4 AND ipd_frac_multi_peak <= 2 AND w1mpro_pm_wise IS NOT NULL", ranges=12)
3212
  st = []
@@ -3216,8 +3216,9 @@ def etzwarm_main(record=False, planet="", zone_deg=0.264, control_min_deg=1.0, c
3216
  continue
3217
  st.append(dict(id=r["source_id"], beta=latitude(float(r["ra"]), float(r["dec"])), bprp=bprp, w1=num(r["w1mpro_pm_wise"]),
3218
  s1=num(r["w1sigmpro_pm_wise"]), w3=num(r["w3mpro_wise"]), s3=num(r["w3sigmpro_wise"]), w4=num(r["w4mpro_wise"]),
3219
- s4=num(r["w4sigmpro_wise"]), g=num(r["phot_g_mean_mag"]), plx=num(r["parallax"])))
3220
- warm = {}
 
3221
  for band, lim in (("3", w3_err_max), ("4", w4_err_max)):
3222
  use = [s for s in st if s["w" + band] is not None and s["s" + band] is not None and s["s" + band] < lim and s["s1"] is not None]
3223
  col = np.array([s["w1"] - s["w" + band] for s in use])
@@ -3234,6 +3235,32 @@ def etzwarm_main(record=False, planet="", zone_deg=0.264, control_min_deg=1.0, c
3234
  err = math.hypot(s["s1"], s["s" + band])
3235
  if col[i] - med > max(widths * wid, errors * err):
3236
  warm.setdefault(s["id"], {})[band] = round(float(col[i] - med), 2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3237
  zone = [s for s in st if s["beta"] < zone_deg and (s["w3"] is not None or s["w4"] is not None)]
3238
  near = [s for s in st if control_min_deg <= s["beta"] < control_max_deg and (s["w3"] is not None or s["w4"] is not None)]
3239
  wz = [s for s in zone if s["id"] in warm]
@@ -3329,14 +3356,14 @@ def w2only_main(record=False, widths=5.0, errors=5.0, w3_widths=2.0, colour_min=
3329
  print("recorded")
3330
 
3331
 
3332
- w3only_DOC = r"""Light at 12 um alone: Gaia Catalogue of Nearby Stars objects (probability above 0.9, white-dwarf probability below 0.1, RUWE below 1.4, one IPD peak) at BP-RP 0.5-2.5 with WISE W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, whose W1-W3 lies more than five robust widths and five errors above the single-star locus at their BP-RP while W1-W4 stays within two widths of its own; warm dust that shines at 12 um shines at 22 um as well, and an emitter confined to the 12 um band does not, though the silicate feature at 10 um can lift W3 alone. The stars as far below the W1-W3 locus are the mirror null. Each candidate read in AllWISE for its contamination and variability flags and in SIMBAD; a W3 fainter than 11 mag is an AllWISE faint detection biased bright, a W1-W4 excess at three errors is dust after all, and a second Gaia source within 10 arcsec and five magnitudes shares the 12 um beam.
3333
 
3334
  python -I seti.py infrared w3only [record] [--widths 5] [--errors 5] [--w4-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w3-faint 11] [--beam-arcsec 10]"""
3335
 
3336
 
3337
  def w3only_main(record=False, widths=5.0, errors=5.0, w4_widths=2.0, colour_min=0.5, colour_max=2.5, w1_min=8.0, w1_max=14.0, w3_faint=11.0, beam_arcsec=10.0):
3338
  rows = catalogues.gcns("source_id, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, w1mpro_pm_wise, w1sigmpro_pm_wise, w3mpro_wise, w3sigmpro_wise, "
3339
- "w4mpro_wise, w4sigmpro_wise, ra, dec",
3340
  "gcns_prob > 0.9 AND wd_prob < 0.1 AND ruwe < 1.4 AND ipd_frac_multi_peak <= 2 AND w1mpro_pm_wise BETWEEN %g AND %g "
3341
  "AND w1sigmpro_pm_wise < 0.05 AND w3sigmpro_wise < 0.1 AND w4sigmpro_wise < 0.2" % (w1_min, w1_max), ranges=12)
3342
  st = []
@@ -3345,9 +3372,9 @@ def w3only_main(record=False, widths=5.0, errors=5.0, w4_widths=2.0, colour_min=
3345
  if bp is None or rp is None or not colour_min <= bp - rp <= colour_max or num(r["w3mpro_wise"]) is None or num(r["w4mpro_wise"]) is None:
3346
  continue
3347
  w1, w3, w4 = float(r["w1mpro_pm_wise"]), float(r["w3mpro_wise"]), float(r["w4mpro_wise"])
3348
- st.append(dict(id=r["source_id"], c=bp - rp, g=num(r["phot_g_mean_mag"]), w3=w3, c13=w1 - w3, c14=w1 - w4,
3349
  e13=math.hypot(float(r["w1sigmpro_pm_wise"]), float(r["w3sigmpro_wise"])), e14=math.hypot(float(r["w1sigmpro_pm_wise"]), float(r["w4sigmpro_wise"])),
3350
- ra=float(r["ra"]), dec=float(r["dec"])))
3351
  bins = np.floor(np.array([s["c"] for s in st]) / 0.1).astype(int)
3352
  for key in ("c13", "c14"):
3353
  val = np.array([s[key] for s in st])
@@ -3361,9 +3388,15 @@ def w3only_main(record=False, widths=5.0, errors=5.0, w4_widths=2.0, colour_min=
3361
  down = [s for s in st if s["rc13"] and s["rc14"] and -s["rc13"][0] > max(widths * s["rc13"][1], errors * s["e13"]) and abs(s["rc14"][0]) < w4_widths * s["rc14"][1]]
3362
  flags = {}
3363
  if up:
3364
- for m in core.xmatch([dict(source_id=s["id"], ra=s["ra"], dec=s["dec"]) for s in up], "II/328/allwise", 3.0):
 
 
 
 
 
3365
  if m["source_id"] not in flags or float(m["angDist"]) < flags[m["source_id"]][0]:
3366
- flags[m["source_id"]] = (float(m["angDist"]), (m.get("ccf") or "").strip(), (m.get("ex") or "").strip(), (m.get("var") or m.get("Var") or "").strip())
 
3367
  sim = {}
3368
  for k in range(0, len(up), 200):
3369
  for r in core.simbad("SELECT i.id, b.main_id, b.otype, b.sp_type FROM ident AS i JOIN basic AS b ON i.oidref = b.oid WHERE i.id IN (%s)" % ",".join(
@@ -3372,9 +3405,12 @@ def w3only_main(record=False, widths=5.0, errors=5.0, w4_widths=2.0, colour_min=
3372
  for s in up:
3373
  f = flags.get(s["id"])
3374
  s["simbad"] = sim.get(s["id"])
3375
- s["flags"] = f
 
 
 
3376
  # AllWISE W3 beyond 11 mag is a faint detection biased bright; a W4 excess at three errors is dust, which shines at 22 um as well
3377
- s["vet"] = ("artefact" if (f and (f[1].strip("0") or f[2] not in ("", "0"))) or s["w3"] > w3_faint else
3378
  "dust" if s["rc14"][0] > 3 * s["e14"] else
3379
  "natural-type" if s["simbad"] and s["simbad"][1] not in ("*", "PM*", "HV*", "low-mass*") else None)
3380
  # a second Gaia source inside the 6.5 arcsec W3 beam, within five magnitudes, shares the 12 um flux
@@ -3520,12 +3556,12 @@ def warmgalaxies_main(record=False, d_max_mpc=150.0, ssfr_max=-11.0, heat_min=-1
3520
  print("recorded")
3521
 
3522
 
3523
- irdim_DOC = r"""Infrared dimming next door: Gaia Catalogue of Nearby Stars objects within 20 pc with an AllWISE W1 between 8 and 15 mag, carried to 2015.0 and matched to CatWISE2020 (II/365) within 3 arcsec by CDS XMatch, whose profile W1 changed by more than 0.3 mag between the 2010 AllWISE mean (II/328, matched at the 2010.5 position) and the 2010-2018 CatWISE mean, a star whose 3.4 um light fell or rose by a third over the decade while nothing in the optical is asked; each read for its Gaia variability flag, its RUWE and image flags, its SIMBAD type and the AllWISE and CatWISE flags, with the stars that brightened as the mirror; CatWISE saturates brighter than W1 8.5, a match beyond 1.5 arcsec at a star next door is another source, and a star moving faster than a second a year is split between the epochs of CatWISE's coadds.
3524
 
3525
- python -I seti.py infrared irdim [record] [--plx-min 50] [--dmag 0.3] [--radius-arcsec 3] [--saturation 8.5] [--match-arcsec 1.5] [--fast-mas-yr 1000]"""
3526
 
3527
 
3528
- def irdim_main(record=False, plx_min=50.0, dmag=0.3, radius_arcsec=3.0, saturation=8.5, match_arcsec=1.5, fast_mas_yr=1000.0):
3529
  rows = catalogues.gcns("source_id, ra, dec, pmra, pmdec, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, ruwe, ipd_frac_multi_peak, w1mpro_pm_wise, "
3530
  "w1sigmpro_pm_wise", "gcns_prob > 0.9 AND parallax > %g AND w1mpro_pm_wise BETWEEN 8 AND 15 AND w1sigmpro_pm_wise < 0.05" % plx_min, ranges=12)
3531
  # AllWISE's profile magnitude at 2010.5 and CatWISE's at 2015.0, each matched at the star's position for its epoch
@@ -3552,6 +3588,7 @@ def irdim_main(record=False, plx_min=50.0, dmag=0.3, radius_arcsec=3.0, saturati
3552
  continue
3553
  st.append(dict(id=str(r["source_id"]), w1_all=a[1], w1_cat=c[1], d=c[1] - a[1], e=math.hypot(a[2] or 0, c[2] or 0), sep=c[0], flags=(a[3] + "/" + c[3]).strip("/"),
3554
  g=num(r["phot_g_mean_mag"]), ruwe=num(r["ruwe"]), multi=num(r["ipd_frac_multi_peak"]), var="", pm=math.hypot(num(r["pmra"]) or 0.0, num(r["pmdec"]) or 0.0),
 
3555
  c=(num(r["phot_bp_mean_mag"]) - num(r["phot_rp_mean_mag"])) if num(r["phot_bp_mean_mag"]) is not None and num(r["phot_rp_mean_mag"]) is not None else None))
3556
  d = np.array([s["d"] for s in st])
3557
  off = float(np.median(d)) if len(d) else 0.0
@@ -3577,6 +3614,24 @@ def irdim_main(record=False, plx_min=50.0, dmag=0.3, radius_arcsec=3.0, saturati
3577
  "blend" if (s["ruwe"] or 0) > 1.4 or (s["multi"] or 0) > 2 or typ in ("**", "SB*") else
3578
  "artefact" if s["flags"].replace("/", "").strip("0") or s["w1_all"] < saturation else
3579
  "astrometry" if s["sep"] > match_arcsec or s["pm"] > fast_mas_yr else None)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3580
  left = [s for s in both if s["vet"] is None]
3581
  count = {v: sum(s["vet"] == v for s in both) for v in ("variable-star", "blend", "artefact", "astrometry")}
3582
  print("%d stars within %.0f pc with AllWISE and CatWISE W1; CatWISE minus AllWISE median %+.3f, robust scatter %.3f; fainter by %g: %d, brighter by as much: %d; variables %d, "
@@ -3599,8 +3654,9 @@ def irdim_main(record=False, plx_min=50.0, dmag=0.3, radius_arcsec=3.0, saturati
3599
  "%d fainter against %d brighter; %d variables, %d blends, %d flagged or saturated, %d matched to another source; %d unexplained" % (
3600
  len(dim), len(bright), count["variable-star"], count["blend"], count["artefact"], count["astrometry"], len(left)),
3601
  [dict(target="gaia_dr3:%s" % s["id"], stat=round(s["d"] - off, 3), unit="CatWISE minus AllWISE W1 less the offset, mag", vet=s["vet"],
3602
- note="W1 %.3f to %.3f +- %.3f at %.1f arcsec, flags %s; G %s, RUWE %s, %s, %.0f mas/yr; SIMBAD %s" % (
3603
- s["w1_all"], s["w1_cat"], s["e"], s["sep"], s["flags"] or "-", s["g"], s["ruwe"], s["var"], s["pm"], s["simbad"])) for s in both])
 
3604
  print("recorded")
3605
 
3606
 
@@ -4516,7 +4572,80 @@ def coldcomp_main(record=False, t_min=2.8, t_max=10.0, sigmas=2.0, dust_alpha=2.
4516
  print("recorded")
4517
 
4518
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4519
  APPROACHES = {
 
4520
  "coldcomp": (lambda: core.run_cli(coldcomp_main), coldcomp_DOC),
4521
  "diskvoids": (lambda: core.run_cli(diskvoids_main), diskvoids_DOC),
4522
  "gcdust": (lambda: core.run_cli(gcdust_main), gcdust_DOC),
 
3183
  print("recorded")
3184
 
3185
 
3186
+ etzwarm_DOC = r"""Warm stars in Earth's transit zone: Gaia Catalogue of Nearby Stars objects (probability above 0.9, not white dwarfs, RUWE below 1.4, one IPD peak) with WISE W1 and a W3 or W4 detection at S/N 10 or 5, whose W1-W3 or W1-W4 colour lies more than five robust widths and three errors above the locus of single stars of the same BP-RP, and still does with AllWISE's plain profile W1 in place of the catalogue's proper-motion-fitted W1, which runs faint for bright and fast stars; the share of such stars within 0.264 deg of the ecliptic, where Earth's transits across the Sun are seen, against the share 1-5 deg away. A watcher of Earth's transits with a civilisation's waste heat would raise the share in the zone.
3187
 
3188
  With `--planet NAME` the zone is that planet's transit zone, the Sun's angular radius at the planet's distance either side of its orbital plane, where a watcher sees the giant planet rather than Earth, and the control band is measured from that plane.
3189
 
 
3206
  x, y, z = math.cos(de) * math.cos(ra), math.cos(de) * math.sin(ra), math.sin(de)
3207
  ye, ze = y * math.cos(eps) + z * math.sin(eps), -y * math.sin(eps) + z * math.cos(eps)
3208
  return abs(math.degrees(math.asin(max(-1.0, min(1.0, x * normal[0] + ye * normal[1] + ze * normal[2])))))
3209
+ rows = catalogues.gcns("source_id, ra, dec, pmra, pmdec, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, ruwe, ipd_frac_multi_peak, w1mpro_pm_wise, "
3210
  "w1sigmpro_pm_wise, w3mpro_wise, w3sigmpro_wise, w4mpro_wise, w4sigmpro_wise",
3211
  "gcns_prob > 0.9 AND wd_prob < 0.1 AND ruwe < 1.4 AND ipd_frac_multi_peak <= 2 AND w1mpro_pm_wise IS NOT NULL", ranges=12)
3212
  st = []
 
3216
  continue
3217
  st.append(dict(id=r["source_id"], beta=latitude(float(r["ra"]), float(r["dec"])), bprp=bprp, w1=num(r["w1mpro_pm_wise"]),
3218
  s1=num(r["w1sigmpro_pm_wise"]), w3=num(r["w3mpro_wise"]), s3=num(r["w3sigmpro_wise"]), w4=num(r["w4mpro_wise"]),
3219
+ s4=num(r["w4sigmpro_wise"]), g=num(r["phot_g_mean_mag"]), plx=num(r["parallax"]), ra=float(r["ra"]), dec=float(r["dec"]),
3220
+ pmra=num(r["pmra"]) or 0.0, pmdec=num(r["pmdec"]) or 0.0))
3221
+ warm, loci = {}, {}
3222
  for band, lim in (("3", w3_err_max), ("4", w4_err_max)):
3223
  use = [s for s in st if s["w" + band] is not None and s["s" + band] is not None and s["s" + band] < lim and s["s1"] is not None]
3224
  col = np.array([s["w1"] - s["w" + band] for s in use])
 
3235
  err = math.hypot(s["s1"], s["s" + band])
3236
  if col[i] - med > max(widths * wid, errors * err):
3237
  warm.setdefault(s["id"], {})[band] = round(float(col[i] - med), 2)
3238
+ loci[(s["id"], band)] = (med, wid, err)
3239
+ # the catalogue's W1 is AllWISE's proper-motion fit, which runs up to a magnitude faint of the plain profile W1 for bright and fast stars:
3240
+ # each warm star's colour taken again with the plain W1 at its 2010.5 position, against the same locus
3241
+ by_id = {s["id"]: s for s in st}
3242
+ pts = [dict(source_id=str(i), ra=core.star_at(by_id[i]["ra"], by_id[i]["dec"], by_id[i]["pmra"], by_id[i]["pmdec"], 2016.0, 2010.5)[0] % 360,
3243
+ dec=core.star_at(by_id[i]["ra"], by_id[i]["dec"], by_id[i]["pmra"], by_id[i]["pmdec"], 2016.0, 2010.5)[1]) for i in warm]
3244
+ plain = {}
3245
+ for k in range(0, len(pts), 2000):
3246
+ for m in core.xmatch(pts[k:k + 2000], "II/328/allwise", 3.0):
3247
+ w1 = num(m.get("W1mag"))
3248
+ if w1 is not None and (m["source_id"] not in plain or float(m["angDist"]) < plain[m["source_id"]][0]):
3249
+ plain[m["source_id"]] = (float(m["angDist"]), w1)
3250
+ fitted = 0
3251
+ for i in list(warm):
3252
+ p = plain.get(str(i))
3253
+ if p is None:
3254
+ continue
3255
+ s = by_id[i]
3256
+ still = {band: round(float(p[1] - s["w" + band] - loci[(i, band)][0]), 2) for band in warm[i]
3257
+ if p[1] - s["w" + band] - loci[(i, band)][0] > max(widths * loci[(i, band)][1], errors * loci[(i, band)][2])}
3258
+ if not still:
3259
+ del warm[i]
3260
+ fitted += 1
3261
+ else:
3262
+ warm[i] = still
3263
+ print("%d warm by the catalogue's proper-motion-fitted W1 lose their excess with AllWISE's plain W1" % fitted)
3264
  zone = [s for s in st if s["beta"] < zone_deg and (s["w3"] is not None or s["w4"] is not None)]
3265
  near = [s for s in st if control_min_deg <= s["beta"] < control_max_deg and (s["w3"] is not None or s["w4"] is not None)]
3266
  wz = [s for s in zone if s["id"] in warm]
 
3356
  print("recorded")
3357
 
3358
 
3359
+ w3only_DOC = r"""Light at 12 um alone: Gaia Catalogue of Nearby Stars objects (probability above 0.9, white-dwarf probability below 0.1, RUWE below 1.4, one IPD peak) at BP-RP 0.5-2.5 with WISE W1 8-14 and W1, W3 and W4 measured to 0.05, 0.1 and 0.2 mag, whose W1-W3 lies more than five robust widths and five errors above the single-star locus at their BP-RP while W1-W4 stays within two widths of its own; warm dust that shines at 12 um shines at 22 um as well, and an emitter confined to the 12 um band does not, though the silicate feature at 10 um can lift W3 alone. The stars as far below the W1-W3 locus are the mirror null. Each candidate read in AllWISE at its 2010.5 position for its contamination and variability flags and its plain profile W1, against which the catalogue's proper-motion-fitted W1 runs faint for bright and fast stars, and in SIMBAD; a W3 fainter than 11 mag is an AllWISE faint detection biased bright, a W1-W4 excess at three errors is dust after all, and a second Gaia source within 10 arcsec and five magnitudes shares the 12 um beam.
3360
 
3361
  python -I seti.py infrared w3only [record] [--widths 5] [--errors 5] [--w4-widths 2] [--colour-min 0.5] [--colour-max 2.5] [--w1-min 8] [--w1-max 14] [--w3-faint 11] [--beam-arcsec 10]"""
3362
 
3363
 
3364
  def w3only_main(record=False, widths=5.0, errors=5.0, w4_widths=2.0, colour_min=0.5, colour_max=2.5, w1_min=8.0, w1_max=14.0, w3_faint=11.0, beam_arcsec=10.0):
3365
  rows = catalogues.gcns("source_id, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, w1mpro_pm_wise, w1sigmpro_pm_wise, w3mpro_wise, w3sigmpro_wise, "
3366
+ "w4mpro_wise, w4sigmpro_wise, ra, dec, pmra, pmdec",
3367
  "gcns_prob > 0.9 AND wd_prob < 0.1 AND ruwe < 1.4 AND ipd_frac_multi_peak <= 2 AND w1mpro_pm_wise BETWEEN %g AND %g "
3368
  "AND w1sigmpro_pm_wise < 0.05 AND w3sigmpro_wise < 0.1 AND w4sigmpro_wise < 0.2" % (w1_min, w1_max), ranges=12)
3369
  st = []
 
3372
  if bp is None or rp is None or not colour_min <= bp - rp <= colour_max or num(r["w3mpro_wise"]) is None or num(r["w4mpro_wise"]) is None:
3373
  continue
3374
  w1, w3, w4 = float(r["w1mpro_pm_wise"]), float(r["w3mpro_wise"]), float(r["w4mpro_wise"])
3375
+ st.append(dict(id=r["source_id"], c=bp - rp, g=num(r["phot_g_mean_mag"]), w1=w1, w3=w3, c13=w1 - w3, c14=w1 - w4,
3376
  e13=math.hypot(float(r["w1sigmpro_pm_wise"]), float(r["w3sigmpro_wise"])), e14=math.hypot(float(r["w1sigmpro_pm_wise"]), float(r["w4sigmpro_wise"])),
3377
+ ra=float(r["ra"]), dec=float(r["dec"]), pmra=num(r["pmra"]) or 0.0, pmdec=num(r["pmdec"]) or 0.0))
3378
  bins = np.floor(np.array([s["c"] for s in st]) / 0.1).astype(int)
3379
  for key in ("c13", "c14"):
3380
  val = np.array([s[key] for s in st])
 
3388
  down = [s for s in st if s["rc13"] and s["rc14"] and -s["rc13"][0] > max(widths * s["rc13"][1], errors * s["e13"]) and abs(s["rc14"][0]) < w4_widths * s["rc14"][1]]
3389
  flags = {}
3390
  if up:
3391
+ # AllWISE at each star's 2010.5 position, its flags and its plain profile W1
3392
+ pts = []
3393
+ for s in up:
3394
+ ra10, de10 = core.star_at(s["ra"], s["dec"], s["pmra"], s["pmdec"], 2016.0, 2010.5)
3395
+ pts.append(dict(source_id=s["id"], ra=ra10 % 360, dec=de10))
3396
+ for m in core.xmatch(pts, "II/328/allwise", 3.0):
3397
  if m["source_id"] not in flags or float(m["angDist"]) < flags[m["source_id"]][0]:
3398
+ flags[m["source_id"]] = (float(m["angDist"]), (m.get("ccf") or "").strip(), (m.get("ex") or "").strip(), (m.get("var") or m.get("Var") or "").strip(),
3399
+ num(m.get("W1mag")))
3400
  sim = {}
3401
  for k in range(0, len(up), 200):
3402
  for r in core.simbad("SELECT i.id, b.main_id, b.otype, b.sp_type FROM ident AS i JOIN basic AS b ON i.oidref = b.oid WHERE i.id IN (%s)" % ",".join(
 
3405
  for s in up:
3406
  f = flags.get(s["id"])
3407
  s["simbad"] = sim.get(s["id"])
3408
+ s["flags"] = f[:4] if f else None
3409
+ # the excess taken again with AllWISE's plain profile W1, since the catalogue's proper-motion-fitted W1 runs faint for bright and fast stars
3410
+ s["w1_plain"] = f[4] if f else None
3411
+ plain_gone = s["w1_plain"] is not None and s["rc13"][0] + (s["w1_plain"] - s["w1"]) <= max(widths * s["rc13"][1], errors * s["e13"])
3412
  # AllWISE W3 beyond 11 mag is a faint detection biased bright; a W4 excess at three errors is dust, which shines at 22 um as well
3413
+ s["vet"] = ("artefact" if (f and (f[1].strip("0") or f[2] not in ("", "0"))) or s["w3"] > w3_faint or plain_gone else
3414
  "dust" if s["rc14"][0] > 3 * s["e14"] else
3415
  "natural-type" if s["simbad"] and s["simbad"][1] not in ("*", "PM*", "HV*", "low-mass*") else None)
3416
  # a second Gaia source inside the 6.5 arcsec W3 beam, within five magnitudes, shares the 12 um flux
 
3556
  print("recorded")
3557
 
3558
 
3559
+ irdim_DOC = r"""Infrared dimming next door: Gaia Catalogue of Nearby Stars objects within 20 pc with an AllWISE W1 between 8 and 15 mag, carried to 2015.0 and matched to CatWISE2020 (II/365) within 3 arcsec by CDS XMatch, whose profile W1 changed by more than 0.3 mag between the 2010 AllWISE mean (II/328, matched at the 2010.5 position) and the 2010-2018 CatWISE mean, a star whose 3.4 um light fell or rose by a third over the decade while nothing in the optical is asked; each read for its Gaia variability flag, its RUWE and image flags, its SIMBAD type and the AllWISE and CatWISE flags, with the stars that brightened as the mirror; CatWISE saturates brighter than W1 8.5, a match beyond 1.5 arcsec at a star next door is another source, and a star moving faster than a second a year is split between the epochs of CatWISE's coadds; a star still unexplained is read in NEOWISE's single exposures of 2014-2024 at its own position on each date, and one holding AllWISE's W1 there to 0.15 mag did not fade, CatWISE's proper-motion-fitted W1 of a fast star having moved instead.
3560
 
3561
+ python -I seti.py infrared irdim [record] [--plx-min 50] [--dmag 0.3] [--radius-arcsec 3] [--saturation 8.5] [--match-arcsec 1.5] [--fast-mas-yr 1000] [--neowise-tol 0.15]"""
3562
 
3563
 
3564
+ def irdim_main(record=False, plx_min=50.0, dmag=0.3, radius_arcsec=3.0, saturation=8.5, match_arcsec=1.5, fast_mas_yr=1000.0, neowise_tol=0.15):
3565
  rows = catalogues.gcns("source_id, ra, dec, pmra, pmdec, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, ruwe, ipd_frac_multi_peak, w1mpro_pm_wise, "
3566
  "w1sigmpro_pm_wise", "gcns_prob > 0.9 AND parallax > %g AND w1mpro_pm_wise BETWEEN 8 AND 15 AND w1sigmpro_pm_wise < 0.05" % plx_min, ranges=12)
3567
  # AllWISE's profile magnitude at 2010.5 and CatWISE's at 2015.0, each matched at the star's position for its epoch
 
3588
  continue
3589
  st.append(dict(id=str(r["source_id"]), w1_all=a[1], w1_cat=c[1], d=c[1] - a[1], e=math.hypot(a[2] or 0, c[2] or 0), sep=c[0], flags=(a[3] + "/" + c[3]).strip("/"),
3590
  g=num(r["phot_g_mean_mag"]), ruwe=num(r["ruwe"]), multi=num(r["ipd_frac_multi_peak"]), var="", pm=math.hypot(num(r["pmra"]) or 0.0, num(r["pmdec"]) or 0.0),
3591
+ ra=float(r["ra"]), dec=float(r["dec"]), pmra=num(r["pmra"]) or 0.0, pmdec=num(r["pmdec"]) or 0.0, neowise=None,
3592
  c=(num(r["phot_bp_mean_mag"]) - num(r["phot_rp_mean_mag"])) if num(r["phot_bp_mean_mag"]) is not None and num(r["phot_rp_mean_mag"]) is not None else None))
3593
  d = np.array([s["d"] for s in st])
3594
  off = float(np.median(d)) if len(d) else 0.0
 
3614
  "blend" if (s["ruwe"] or 0) > 1.4 or (s["multi"] or 0) > 2 or typ in ("**", "SB*") else
3615
  "artefact" if s["flags"].replace("/", "").strip("0") or s["w1_all"] < saturation else
3616
  "astrometry" if s["sep"] > match_arcsec or s["pm"] > fast_mas_yr else None)
3617
+ # the rest against NEOWISE's single exposures of 2014-2024, each read at the star's own position on its date: a star whose 3.4 um light holds at
3618
+ # AllWISE's level there did not fade, and CatWISE's proper-motion-fitted W1 of a fast star is what moved
3619
+ for s in both:
3620
+ if s["vet"] is not None:
3621
+ continue
3622
+ ra19, de19 = core.star_at(s["ra"], s["dec"], s["pmra"], s["pmdec"], 2016.0, 2019.5)
3623
+ found = core.tap("irsa", "SELECT mjd, ra, dec, w1mpro, qual_frame FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', %.6f, %.6f, %.6f)) = 1"
3624
+ % (ra19 % 360, de19, 9 / 3600.0), timeout=900)
3625
+ w = []
3626
+ for x in found:
3627
+ if num(x["w1mpro"]) is None or (num(x["qual_frame"]) or 0) <= 0:
3628
+ continue
3629
+ pr, pd = core.star_at(s["ra"], s["dec"], s["pmra"], s["pmdec"], 2016.0, 2000.0 + (float(x["mjd"]) - 51544.5) / 365.25)
3630
+ if math.hypot((float(x["ra"]) - pr) * math.cos(math.radians(pd)), float(x["dec"]) - pd) * 3600 < 2.0:
3631
+ w.append(float(x["w1mpro"]))
3632
+ s["neowise"] = (len(w), float(np.median(w))) if w else (0, None)
3633
+ if len(w) >= 10 and abs(s["neowise"][1] - s["w1_all"]) < neowise_tol:
3634
+ s["vet"] = "artefact"
3635
  left = [s for s in both if s["vet"] is None]
3636
  count = {v: sum(s["vet"] == v for s in both) for v in ("variable-star", "blend", "artefact", "astrometry")}
3637
  print("%d stars within %.0f pc with AllWISE and CatWISE W1; CatWISE minus AllWISE median %+.3f, robust scatter %.3f; fainter by %g: %d, brighter by as much: %d; variables %d, "
 
3654
  "%d fainter against %d brighter; %d variables, %d blends, %d flagged or saturated, %d matched to another source; %d unexplained" % (
3655
  len(dim), len(bright), count["variable-star"], count["blend"], count["artefact"], count["astrometry"], len(left)),
3656
  [dict(target="gaia_dr3:%s" % s["id"], stat=round(s["d"] - off, 3), unit="CatWISE minus AllWISE W1 less the offset, mag", vet=s["vet"],
3657
+ note="W1 %.3f to %.3f +- %.3f at %.1f arcsec, flags %s; G %s, RUWE %s, %s, %.0f mas/yr; SIMBAD %s%s" % (
3658
+ s["w1_all"], s["w1_cat"], s["e"], s["sep"], s["flags"] or "-", s["g"], s["ruwe"], s["var"], s["pm"], s["simbad"],
3659
+ "; NEOWISE 2014-2024: %d single exposures, median W1 %.3f" % s["neowise"] if s.get("neowise") and s["neowise"][1] is not None else "")) for s in both])
3660
  print("recorded")
3661
 
3662
 
 
4572
  print("recorded")
4573
 
4574
 
4575
+ pvedge_DOC = r"""A silicon photovoltaic edge: a star wrapped in silicon collectors absorbs below 1.1 um and passes the J band, so RP-J rises at fixed BP-RP while J-Ks stays on its locus; Gaia Catalogue of Nearby Stars members at BP-RP 0.5-3.0 with RUWE below 1.4, one image peak and J and Ks measured to 0.03 mag, RP-J more than five locus widths and five errors above the running median at their colour with J-Ks within two widths of its own, against the stars as far below; each read for 2MASS quality and contamination flags, a Gaia neighbour within 4 arcsec and 6 mag inside the 2MASS beam, and the height above the main sequence in M_G at the same colour, where an unresolved twin sits 0.4-0.75 mag above it; RP-J at fixed BP-RP also rises with metallicity, so a photometric excess alone does not separate a collector from a metal-rich star.
4576
+
4577
+ python -I seti.py infrared pvedge [record] [--widths 5] [--jk-widths 2] [--emax 0.03] [--beam-arcsec 4] [--twin-mag 0.4]"""
4578
+
4579
+
4580
+ def pvedge_main(record=False, widths=5.0, jk_widths=2.0, emax=0.03, beam_arcsec=4.0, twin_mag=0.4):
4581
+ rows = catalogues.gcns("source_id, ra, dec, parallax, phot_g_mean_mag, phot_bp_mean_mag, phot_rp_mean_mag, j_m_2mass, j_msig_2mass, k_m_2mass, k_msig_2mass, ruwe, ipd_frac_multi_peak, pmra, pmdec",
4582
+ "gcns_prob > 0.9 AND wd_prob < 0.1 AND ruwe < 1.4 AND ipd_frac_multi_peak <= 2 AND j_msig_2mass < %g AND k_msig_2mass < %g AND j_m_2mass > 5" % (emax, emax), ranges=12)
4583
+ st = []
4584
+ for r in rows:
4585
+ bp, rp, g, j, k, plx = (num(r[c]) for c in ("phot_bp_mean_mag", "phot_rp_mean_mag", "phot_g_mean_mag", "j_m_2mass", "k_m_2mass", "parallax"))
4586
+ if None in (bp, rp, g, j, k, plx) or not 0.5 <= bp - rp <= 3.0:
4587
+ continue
4588
+ st.append(dict(id=str(r["source_id"]), ra=float(r["ra"]), dec=float(r["dec"]), c=bp - rp, g=g, mg=g + 5 * math.log10(plx / 100), rpj=rp - j, jk=j - k,
4589
+ e=math.hypot(float(r["j_msig_2mass"]), 0.003), pm=math.hypot(num(r["pmra"]) or 0, num(r["pmdec"]) or 0)))
4590
+ bins = np.floor(np.array([s["c"] for s in st]) / 0.05).astype(int)
4591
+ for key in ("rpj", "jk", "mg"):
4592
+ v = np.array([s[key] for s in st])
4593
+ for b in set(bins.tolist()):
4594
+ i = np.nonzero(bins == b)[0]
4595
+ med = float(np.median(v[i]))
4596
+ wid = 1.4826 * float(np.median(np.abs(v[i] - med)))
4597
+ for t in i:
4598
+ st[t]["r" + key] = (v[t] - med, wid) if len(i) >= 30 else None
4599
+ ok = [s for s in st if s["rrpj"] and s["rjk"]]
4600
+ up = [s for s in ok if s["rrpj"][0] > max(widths * s["rrpj"][1], widths * s["e"]) and abs(s["rjk"][0]) < jk_widths * s["rjk"][1]]
4601
+ down = [s for s in ok if -s["rrpj"][0] > max(widths * s["rrpj"][1], widths * s["e"]) and abs(s["rjk"][0]) < jk_widths * s["rjk"][1]]
4602
+ flags = {}
4603
+ for k0 in range(0, len(up), 2000):
4604
+ for m in core.xmatch([dict(source_id=s["id"], ra=s["ra"], dec=s["dec"]) for s in up[k0:k0 + 2000]], "II/246/out", 5.0):
4605
+ if m["source_id"] not in flags or float(m["angDist"]) < flags[m["source_id"]][0]:
4606
+ flags[m["source_id"]] = (float(m["angDist"]), str(m.get("Qfl") or m.get("Qflg") or "").strip(), str(m.get("Cfl") or m.get("Cflg") or "").strip())
4607
+ near = {}
4608
+ for k0 in range(0, len(up), 50):
4609
+ chunk = up[k0:k0 + 50]
4610
+ where = " OR ".join("1 = CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', %.6f, %.6f, %.6f))" % (s["ra"], s["dec"], beam_arcsec / 3600) for s in chunk)
4611
+ for r in core.tap("gaia", "SELECT source_id, ra, dec, phot_g_mean_mag FROM gaiadr3.gaia_source WHERE " + where):
4612
+ for s in chunk:
4613
+ if str(r["source_id"]) != s["id"] and sep_arcsec(float(r["ra"]), float(r["dec"]), s["ra"], s["dec"]) < beam_arcsec \
4614
+ and (num(r["phot_g_mean_mag"]) is None or num(r["phot_g_mean_mag"]) < s["g"] + 6):
4615
+ near.setdefault(s["id"], []).append(num(r["phot_g_mean_mag"]))
4616
+ for s in up:
4617
+ f = flags.get(s["id"])
4618
+ s["tmass"] = f
4619
+ s["near"] = near.get(s["id"], [])
4620
+ s["mg_off"] = -s["rmg"][0] if s.get("rmg") else None
4621
+ s["vet"] = ("blend" if s["near"] else "artefact" if f and (f[1][:1] != "A" or f[1][2:3] != "A" or f[2].strip("0")) else
4622
+ "binary" if s["mg_off"] is not None and s["mg_off"] > twin_mag else None)
4623
+ left = [s for s in up if s["vet"] is None]
4624
+ print("%d stars at BP-RP 0.5-3.0 with clean J and Ks; RP-J above by %g widths with J-Ks on its locus: %d; as far below: %d; "
4625
+ "%d blends, %d with 2MASS flags, %d above the main sequence by %g mag; %d left" % (
4626
+ len(ok), widths, len(up), len(down), sum(s["vet"] == "blend" for s in up), sum(s["vet"] == "artefact" for s in up),
4627
+ sum(s["vet"] == "binary" for s in up), twin_mag, len(left)))
4628
+ for s in sorted(left, key=lambda s: -s["rrpj"][0] / s["rrpj"][1])[:30]:
4629
+ print(" Gaia DR3 %s BP-RP %.2f G %.2f RP-J +%.3f (%.1f widths) J-Ks %+.3f, M_G %+.2f from the sequence, pm %.0f mas/yr" % (
4630
+ s["id"], s["c"], s["g"], s["rrpj"][0], s["rrpj"][0] / s["rrpj"][1], s["rjk"][0], s["mg_off"] or 0, s["pm"]))
4631
+ if record:
4632
+ core.record_run(
4633
+ "pv_edge_rp_j", "A silicon photovoltaic edge", "Gaia Catalogue of Nearby Stars with its 2MASS photometry; 2MASS PSC (II/246) by CDS XMatch; Gaia DR3",
4634
+ "%d single-looking stars at BP-RP 0.5-3.0 with J and Ks to %g mag" % (len(ok), emax), os.path.abspath(__file__), "pvedge", len(ok), "stars",
4635
+ dict(widths=widths, jk_widths=jk_widths, emax=emax, beam_arcsec=beam_arcsec, twin_mag=twin_mag), dict(above=len(up), below=len(down)),
4636
+ "RP-J %g locus widths and errors above the running median at the star's colour with J-Ks on its locus" % widths,
4637
+ "%d above against %d below: %d blends, %d with 2MASS flags, %d twins above the main sequence; %d left, which the metallicity dependence of RP-J at fixed BP-RP "
4638
+ "leaves undecided by photometry" % (len(up), len(down), sum(s["vet"] == "blend" for s in up), sum(s["vet"] == "artefact" for s in up),
4639
+ sum(s["vet"] == "binary" for s in up), len(left)),
4640
+ [dict(target="gaia_dr3:%s" % s["id"], stat=round(s["rrpj"][0] / s["rrpj"][1], 1), unit="RP-J locus widths above the median", vet=s["vet"],
4641
+ note="BP-RP %.2f, G %.2f, RP-J +%.3f, J-Ks %+.3f, M_G %s from the sequence, 2MASS %s, neighbours %s" % (
4642
+ s["c"], s["g"], s["rrpj"][0], s["rjk"][0], "%+.2f" % s["mg_off"] if s["mg_off"] is not None else "-", s["tmass"], s["near"] or "none"))
4643
+ for s in up])
4644
+ print("recorded")
4645
+
4646
+
4647
  APPROACHES = {
4648
+ "pvedge": (lambda: core.run_cli(pvedge_main), pvedge_DOC),
4649
  "coldcomp": (lambda: core.run_cli(coldcomp_main), coldcomp_DOC),
4650
  "diskvoids": (lambda: core.run_cli(diskvoids_main), diskvoids_DOC),
4651
  "gcdust": (lambda: core.run_cli(gcdust_main), gcdust_DOC),
setitools/lasers.py CHANGED
@@ -4996,7 +4996,123 @@ def skyfibre_cli():
4996
  skyfibre_summary()
4997
 
4998
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4999
  APPROACHES = {
 
5000
  "skyfibre": (skyfibre_cli, skyfibre_DOC),
5001
  "rvs": (rvs_cli, rvs_DOC),
5002
  "eso": (eso_cli, eso_DOC),
 
4996
  skyfibre_summary()
4997
 
4998
 
4999
+ telecom_DOC = r"""Telecom-band laser lines: the cached NIRPS and SPIRou spectra of the shoreline programme's M dwarfs, unresolved emission two to six samples wide above six local deviations in the O band (1260-1330 nm) and the C and L bands (1530-1625 nm), Paschen beta masked, recurring within 1.5 km/s in the star's frame on three or more nights whose barycentric corrections spread over 3 km/s, so a feature fixed at the telescope cannot recur, against the absorption-like dips the same test finds, the mirror; a recurring peak whose wavelengths scatter less in the telescope's frame than in the star's is sky emission the subtraction left, and one seen in more than one star sits on the stars' shared molecular pseudo-continuum rather than on one star.
5000
+
5001
+ python -I seti.py lasers telecom [record] [--sig 6] [--tol-kms 1.5] [--min-nights 3] [--min-berv-spread 3] [--edge 30]"""
5002
+
5003
+ telecom_WINDOWS = ((12600.0, 13300.0), (15300.0, 16250.0))
5004
+ telecom_MASK = ((12815.0, 12822.0),) # Paschen beta in air, in emission in active M dwarfs
5005
+
5006
+
5007
+ def telecom_features(w, f, sign, sig, edge):
5008
+ """Unresolved features of one sign above SIG local deviations in the windows: (wavelength, significance)."""
5009
+ from scipy.ndimage import median_filter
5010
+ out = []
5011
+ for lo, hi in telecom_WINDOWS:
5012
+ m = (w > lo) & (w < hi) & np.isfinite(f)
5013
+ if m.sum() < 500:
5014
+ continue
5015
+ ww, ff = w[m], f[m]
5016
+ r = sign * (ff / median_filter(ff, size=41, mode="nearest") - 1.0)
5017
+ n = len(r)
5018
+ sd = 1.4826 * median_filter(np.abs(r - median_filter(r, size=401, mode="nearest")), size=401, mode="nearest")
5019
+ sd = np.where(sd > 0.2 * np.nanmedian(sd), sd, np.inf)
5020
+ # zero-filled stretches repeat a value exactly
5021
+ z = np.where(np.r_[False, np.diff(ff) == 0], 0.0, r / sd)
5022
+ for i in np.nonzero((z > sig) & (z >= np.roll(z, 1)) & (z >= np.roll(z, -1)))[0]:
5023
+ if i < 3 or i > n - 4 or any(a < ww[i] < b for a, b in telecom_MASK) or not lo + edge < ww[i] < hi - edge:
5024
+ continue
5025
+ j0, j1 = i, i
5026
+ while j0 > 0 and z[j0 - 1] > z[i] / 2:
5027
+ j0 -= 1
5028
+ while j1 < n - 1 and z[j1 + 1] > z[i] / 2:
5029
+ j1 += 1
5030
+ # a line through the spectrograph spans two to six samples above half its height; one sample is a hit on the detector
5031
+ if 2 <= j1 - j0 + 1 <= 6:
5032
+ out.append((float(ww[i]), float(z[i])))
5033
+ return out
5034
+
5035
+
5036
+ def telecom_main(record=False, sig=6.0, tol_kms=1.5, min_nights=3, min_berv_spread=3.0, edge=30.0):
5037
+ from astropy.io import fits
5038
+ from setitools import biosignatures, composition
5039
+ c = 299792.458
5040
+ root = os.path.join(biosignatures.shoreline_ROOT, "spectra")
5041
+ groups = collections.defaultdict(list)
5042
+ for inst in ("NIRPS", "SPIRou"):
5043
+ for p in sorted(glob.glob(os.path.join(root, inst, "*.fits"))):
5044
+ try:
5045
+ obj = str(fits.getheader(p).get("OBJECT", "")).strip().upper()
5046
+ except Exception:
5047
+ continue
5048
+ groups[(inst, re.sub(r"[ _-]", "", obj))].append(p)
5049
+ res, n_dips, n_spec = [], 0, sum(len(v) for v in groups.values())
5050
+ for (inst, obj), paths in sorted(groups.items()):
5051
+ if len(paths) < min_nights:
5052
+ continue
5053
+ loaded = []
5054
+ for p in paths:
5055
+ try:
5056
+ loaded.append(biosignatures.shoreline_load(p))
5057
+ except Exception:
5058
+ continue
5059
+ if not loaded:
5060
+ continue
5061
+ vsys = composition.companions_vsys(loaded)
5062
+ found = {+1: [], -1: []}
5063
+ for w, f, e, meta in loaded:
5064
+ rv = meta.get("rv") if meta.get("rv") is not None else vsys
5065
+ berv = meta.get("berv") or 0.0
5066
+ for sign in (+1, -1):
5067
+ for lam, z in telecom_features(np.asarray(w, float), np.asarray(f, float), sign, sig, edge):
5068
+ found[sign].append(dict(rest=lam / (1.0 + rv / c), obs=lam / (1.0 + berv / c), z=z, night=math.floor(meta["mjd"] + 0.3), berv=berv))
5069
+ rec = {}
5070
+ for sign in (+1, -1):
5071
+ runs = []
5072
+ for x in sorted(found[sign], key=lambda x: x["rest"]):
5073
+ if runs and (x["rest"] - runs[-1][-1]["rest"]) / x["rest"] * c < tol_kms:
5074
+ runs[-1].append(x)
5075
+ else:
5076
+ runs.append([x])
5077
+ # scatter of the feature's wavelength in the star's frame and in the telescope's, in km/s
5078
+ rec[sign] = [dict(rest=float(np.median([x["rest"] for x in g])), nights=len({x["night"] for x in g}), z=max(x["z"] for x in g),
5079
+ spread=max(x["berv"] for x in g) - min(x["berv"] for x in g),
5080
+ sd_star=float(np.std([x["rest"] for x in g]) / g[0]["rest"] * c), sd_tel=float(np.std([x["obs"] for x in g]) / g[0]["obs"] * c))
5081
+ for g in runs if len({x["night"] for x in g}) >= min_nights]
5082
+ rec[sign] = [r for r in rec[sign] if r["spread"] > min_berv_spread]
5083
+ for r in rec[+1]:
5084
+ res.append(dict(inst=inst, obj=obj, **r))
5085
+ n_dips += len(rec[-1])
5086
+ print("%-7s %-16s %3d spectra: recurring peaks %d, recurring dips %d" % (inst, obj[:16], len(paths), len(rec[+1]), len(rec[-1])), flush=True)
5087
+ # a peak at one rest wavelength in two or more stars belongs to the M dwarfs' shared spectrum
5088
+ # a peak that holds its wavelength better at the telescope than in the star is sky emission left by the subtraction
5089
+ for r in res:
5090
+ others = {(x["inst"], x["obj"]) for x in res if abs(x["rest"] - r["rest"]) / r["rest"] * c < 3 * tol_kms and x["obj"] != r["obj"]}
5091
+ r["vet"] = "atmospheric-line" if r["sd_tel"] <= r["sd_star"] else "shared-feature" if others else None
5092
+ left = [r for r in res if r["vet"] is None]
5093
+ print("%d spectra in %d groups; %d recurring peaks against %d recurring dips; %d steadier at the telescope than in the star, %d seen in more than one star, %d left" % (
5094
+ n_spec, len(groups), len(res), n_dips, sum(r["vet"] == "atmospheric-line" for r in res), sum(r["vet"] == "shared-feature" for r in res), len(left)))
5095
+ for r in left:
5096
+ print(" %s %s: %.3f A in the star's frame, %d nights, %.1f sigma, BERV spread %.1f km/s, scatter %.2f km/s in the star and %.2f at the telescope" % (
5097
+ r["inst"], r["obj"], r["rest"], r["nights"], r["z"], r["spread"], r["sd_star"], r["sd_tel"]))
5098
+ if record:
5099
+ # one-star peaks are the photometric tail when the dips, which no laser makes, outnumber them
5100
+ mirror = len(left) <= n_dips
5101
+ core.record_run(
5102
+ "telecom_band_lasers", "Telecom-band laser lines", "ESO Phase 3 (NIRPS) and the CADC (CFHT SPIRou): the shoreline programme's cached spectra",
5103
+ "%d spectra of %d instrument-star groups" % (n_spec, len(groups)), os.path.abspath(__file__), "telecom", len(groups), "instrument-star groups",
5104
+ dict(sig=sig, tol_kms=tol_kms, min_nights=min_nights, min_berv_spread=min_berv_spread, edge=edge, windows=telecom_WINDOWS),
5105
+ dict(peaks=len(res), dips=n_dips), "an unresolved feature above %g local deviations recurring on %d nights in the star's frame" % (sig, min_nights),
5106
+ "%d recurring peaks against %d recurring dips; %d steadier at the telescope than in the star, %d in more than one star; %d left" % (
5107
+ len(res), n_dips, sum(r["vet"] == "atmospheric-line" for r in res), sum(r["vet"] == "shared-feature" for r in res), len(left)),
5108
+ [dict(target="%s#%.3f" % (r["obj"], r["rest"]), stat=round(r["z"], 1), unit="sigma, the strongest night", vet=r["vet"] or ("chance-rate" if mirror else None),
5109
+ note="%s; %d nights; BERV spread %.1f km/s; scatter %.2f km/s in the star, %.2f at the telescope" % (
5110
+ r["inst"], r["nights"], r["spread"], r["sd_star"], r["sd_tel"])) for r in res])
5111
+ print("recorded")
5112
+
5113
+
5114
  APPROACHES = {
5115
+ "telecom": (lambda: core.run_cli(telecom_main), telecom_DOC),
5116
  "skyfibre": (skyfibre_cli, skyfibre_DOC),
5117
  "rvs": (rvs_cli, rvs_DOC),
5118
  "eso": (eso_cli, eso_DOC),
setitools/radio_sky.py CHANGED
@@ -4652,13 +4652,47 @@ def glitchsched_main(record=False, min_glitches=5, cv_max=0.3, draws=4000):
4652
  print("recorded")
4653
 
4654
 
4655
- switchoff_DOC = r"""Radio sources that switched off: NVSS (VizieR VIII/65) sources north of -40 deg and more than 10 deg from the Galactic plane, brighter than 100 mJy at 1.4 GHz and compact, with major axes under 25 arcsec, against the VLASS epoch-1 quick-look components (J/ApJS/255/30) within 20 arcsec by CDS XMatch; a source of that strength falls below VLASS's limit only by fading a hundredfold between 1995 and 2019, which a switched-off transmitter does and a blazar in a deep low state can; each missing source read in SIMBAD, for its NVSS size, since a resolved source VLASS's short baselines dissolve is no fading, for a source above 5 Jy within half a degree, whose sidelobes spoil the quick-look image around it, in RACS-low (J/other/PASA/38.58, 888 MHz, 2019-2020, south of +41 deg), where a source still shining has not faded whatever VLASS lists, and for the catalogue's own holes, a quarter degree holding no component at all, which the component list leaves where its images failed.
4656
 
4657
- python -I seti.py radio_sky switchoff [record] [--flux-min-mjy 100] [--major-max-arcsec 25] [--radius-arcsec 20] [--dec-min -40] [--hole-deg 0.25] [--b-min 10] [--bright-jy 5] [--bright-deg 0.5] [--racs-dec-max 41]"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4658
 
4659
 
4660
  def switchoff_main(record=False, flux_min_mjy=100.0, major_max_arcsec=25.0, radius_arcsec=20.0, dec_min=-40.0, hole_deg=0.25, b_min=10.0, bright_jy=5.0, bright_deg=0.5,
4661
- racs_dec_max=41.0):
4662
  rows = core.tap("vizier", 'SELECT NVSS, RAJ2000, DEJ2000, "S1.4", MajAxis, MinAxis FROM "VIII/65/nvss" WHERE "S1.4" > %g AND DEJ2000 > %g' % (flux_min_mjy, dec_min), timeout=600)
4663
  sk = next(k for k in rows[0] if k.replace("_", ".").lower() == "s1.4") if rows else "S1.4"
4664
  src = [dict(name=str(r["NVSS"]).strip(), ra=float(r["RAJ2000"]), dec=float(r["DEJ2000"]), s=float(r[sk]), maj=num(r["MajAxis"]), min_=num(r["MinAxis"])) for r in rows]
@@ -4700,6 +4734,27 @@ def switchoff_main(record=False, flux_min_mjy=100.0, major_max_arcsec=25.0, radi
4700
  s["around"] = int(n[0]["n"]) if n else 0
4701
  if s["around"] == 0:
4702
  s["vet"] = "catalogue-dropped"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4703
  left = [s for s in gone if s["vet"] is None]
4704
  print("%d NVSS sources above %g mJy north of %g deg, %d compact under %g arcsec more than %g deg from the Galactic plane; without a VLASS component within %g arcsec: %d (%d of "
4705
  "known SIMBAD types, %d within %g deg of a source above %g Jy, %d still shining in RACS-low of 2019-2020 or in holes of the catalogue with no component within %g deg, %d of "
@@ -4708,9 +4763,9 @@ def switchoff_main(record=False, flux_min_mjy=100.0, major_max_arcsec=25.0, radi
4708
  sum(s["vet"] == "catalogue-dropped" for s in gone), hole_deg, sum(1 for s in gone if s["racs_mjy"] is not None), len(left)))
4709
  for s in sorted(gone, key=lambda s: -s["s"]):
4710
  if s["vet"] != "natural-type":
4711
- print(" NVSS %s: %.0f mJy, %.0f x %.0f arcsec at RA %.4f Dec %+.4f, b %+.1f, RACS %s mJy, %s components within %g deg%s; SIMBAD %s; %s" % (
4712
  s["name"], s["s"], s["maj"], s["min_"] or 0, s["ra"], s["dec"], s["b"], s["racs_mjy"], s["around"], hole_deg, ", near " + s["bright"] if s.get("bright") else "",
4713
- s["simbad"], s["vet"] or "unexplained"))
4714
  json.dump(dict(n=len(src), compact=len(compact), gone=gone), open(core.results("radio_switchoffs.json"), "w"), indent=1)
4715
  if record:
4716
  core.record_run(
@@ -4725,8 +4780,9 @@ def switchoff_main(record=False, flux_min_mjy=100.0, major_max_arcsec=25.0, radi
4725
  len(gone), len(compact), sum(s["vet"] == "natural-type" for s in gone), sum(s["vet"] == "bright-neighbour" for s in gone), bright_jy,
4726
  sum(s["vet"] == "catalogue-dropped" for s in gone), len(left)),
4727
  [dict(target="nvss:%s" % s["name"], stat=s["s"], unit="mJy at 1.4 GHz, absent from VLASS", vet=s["vet"],
4728
- note="%.0f x %.0f arcsec; b %+.1f; RACS %s mJy; %s components within %g deg%s; SIMBAD %s" % (s["maj"], s["min_"] or 0, s["b"], s["racs_mjy"], s["around"], hole_deg,
4729
- ", near " + s["bright"] if s.get("bright") else "", s["simbad"])) for s in gone])
 
4730
  print("recorded")
4731
 
4732
 
@@ -5058,9 +5114,9 @@ def hostlesssed_main(record=False, controls=200):
5058
  print("recorded")
5059
 
5060
 
5061
- hostlessnir_DOC = r"""Hosts of the hostless radio sources in the near infrared: the compact CRATES sources the hostless test left bare, against VISTA's VHS DR5 and VIKING DR2 and UKIDSS's LAS DR9 within 2 arcsec, coverage judged by any catalogue source within 1 arcmin, and each K magnitude, or the survey's depth where none is found, turned into a redshift by the K-z relation of radio galaxies (Willott et al. 2003: K = 17.37 + 4.53 log z - 0.31 (log z)^2); a radio galaxy's host follows that relation, so a detection dates the source and a deep non-detection puts it far away.
5062
 
5063
- python -I seti.py radio_sky hostlessnir [record] [--arcsec 2]"""
5064
 
5065
  HOSTLESS_NIR = (("VHS DR5", "II/367/vhs_dr5", 18.1), ("VIKING DR2", "II/343/viking2", 19.2), ("UKIDSS LAS DR9", "II/319/las9", 18.2))
5066
 
@@ -5077,7 +5133,7 @@ def kz_redshift(k):
5077
  return 10 ** (0.5 * (lo + hi))
5078
 
5079
 
5080
- def hostlessnir_main(record=False, arcsec=2.0):
5081
  bare = [b for b in json.load(open(core.results("crates_hostless.json"))) if b.get("vet") is None]
5082
  up = [dict(source_id=k, ra=b["ra"], dec=b["dec"]) for k, b in enumerate(bare)]
5083
  for b in bare:
@@ -5106,9 +5162,33 @@ def hostlessnir_main(record=False, arcsec=2.0):
5106
  b["k"], b["z"], b["z_kind"] = depth, kz_redshift(depth), "lower limit"
5107
  else:
5108
  b["k"], b["z"], b["z_kind"] = None, None, "not covered"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5109
  det = [b for b in bare if b["z_kind"] == "estimate"]
5110
  lim = [b for b in bare if b["z_kind"] == "lower limit"]
5111
- print("%d hostless sources: %d with a near-infrared counterpart within %g arcsec, %d covered with none, %d outside the surveys" % (len(bare), len(det), arcsec, len(lim), len(bare) - len(det) - len(lim)))
 
 
5112
  for b in sorted(bare, key=lambda b: -(b["z"] or 0)):
5113
  print(" %s: %s; K %s, z %s (%s)" % (b["name"], b["nir"] or ("covered by " + ", ".join(b["covered"]) if b["covered"] else "not covered"), "%.2f" % b["k"] if b["k"] else "-",
5114
  "%.1f" % b["z"] if b["z"] else "-", b["z_kind"]))
@@ -5118,10 +5198,12 @@ def hostlessnir_main(record=False, arcsec=2.0):
5118
  "crates_hostless_nir", "Hosts of the hostless radio sources in the near infrared", "VHS DR5, VIKING DR2 and UKIDSS LAS DR9 by CDS XMatch; the K-z relation of Willott et al. (2003)",
5119
  "the hostless sources of crates_hostless_flat_spectrum: %d" % len(bare), os.path.abspath(__file__), "hostlessnir", len(bare), "sources", dict(arcsec=arcsec),
5120
  "each survey's depth (Ks 18.1, 19.2 and K 18.2) on the K-z relation", "a host in the near infrared, or a depth that puts it far away",
5121
- "%d with a counterpart, redshifts %s; %d covered with none, lower limits %s; %d outside the surveys" % (
5122
- len(det), ", ".join("%.1f" % b["z"] for b in det), len(lim), ", ".join("%.1f" % b["z"] for b in lim), len(bare) - len(det) - len(lim)),
 
5123
  [dict(target="crates:%s" % b["name"], stat=round(b["z"], 2) if b["z"] else None, unit="redshift on the K-z relation (%s)" % b["z_kind"], vet=None,
5124
- note="K %s from %s" % ("%.2f" % b["k"] if b["k"] else "-", ", ".join(b["nir"]) or ", ".join(b["covered"]) or "no survey")) for b in bare])
 
5125
  print("recorded")
5126
 
5127
 
 
4652
  print("recorded")
4653
 
4654
 
4655
+ switchoff_DOC = r"""Radio sources that switched off: NVSS (VizieR VIII/65) sources north of -40 deg and more than 10 deg from the Galactic plane, brighter than 100 mJy at 1.4 GHz and compact, with major axes under 25 arcsec, against the VLASS epoch-1 quick-look components (J/ApJS/255/30) within 20 arcsec by CDS XMatch; a source of that strength falls below VLASS's limit only by fading a hundredfold between 1995 and 2019, which a switched-off transmitter does and a blazar in a deep low state can; each missing source read in SIMBAD, for its NVSS size, since a resolved source VLASS's short baselines dissolve is no fading, for a source above 5 Jy within half a degree, whose sidelobes spoil the quick-look image around it, in RACS-low (J/other/PASA/38.58, 888 MHz, 2019-2020, south of +41 deg), where a source still shining has not faded whatever VLASS lists, and for the catalogue's own holes, a quarter degree holding no component at all, which the component list leaves where its images failed; the rest in the surveys made after VLASS epoch 1 (RACS-mid, RACS-high, RACS-low3, LoTSS DR2) within 30 arcsec, as a lobe or hotspot of a brighter source that RACS-mid or TGSS catalogue as one source within 90 arcsec, and in the VLASS quick-look images themselves at the CADC, where a source above 10 sigma within 30 arcsec in any epoch is one the component list dropped.
4656
 
4657
+ python -I seti.py radio_sky switchoff [record] [--flux-min-mjy 100] [--major-max-arcsec 25] [--radius-arcsec 20] [--dec-min -40] [--hole-deg 0.25] [--b-min 10] [--bright-jy 5] [--bright-deg 0.5] [--racs-dec-max 41] [--later-arcsec 30] [--lobe-arcsec 90] [--image-sigma 10]"""
4658
+
4659
+
4660
+ def switchoff_vlass_images(ra, dec, radius_arcsec=30.0):
4661
+ """The brightest pixel within RADIUS_ARCSEC of a position in every VLASS quick-look image the CADC holds of it, in units of the image's noise: [(epoch, sigma, mJy within the radius)]."""
4662
+ import io
4663
+ from astropy.io import fits
4664
+ from astropy.io.votable import parse_single_table
4665
+ from astropy.wcs import WCS
4666
+ base = "https://ws.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/sia/v2query?"
4667
+ out = []
4668
+ t = parse_single_table(io.BytesIO(core.get(base + urllib.parse.urlencode({"POS": "CIRCLE %.5f %.5f 0.01" % (ra, dec), "COLLECTION": "VLASS"}), timeout=120))).to_table()
4669
+ for r in t:
4670
+ try:
4671
+ links = parse_single_table(io.BytesIO(core.get(str(r["access_url"]), timeout=120))).to_table()
4672
+ url = next((str(x["access_url"]) for x in links if str(x["semantics"]) == "#this" and all(k in str(x["access_url"]) for k in ("pbcor", "tt0", "subim"))), None)
4673
+ if not url:
4674
+ continue
4675
+ h = fits.open(io.BytesIO(core.get(url + "?" + urllib.parse.urlencode({"CIRCLE": "%.6f %.6f %.4f" % (ra, dec, 2 * radius_arcsec / 3600)}), timeout=300)))
4676
+ d = np.squeeze(h[0].data).astype(float)
4677
+ w = WCS(h[0].header).celestial
4678
+ pix = abs(h[0].header.get("CDELT1") or h[0].header.get("CD1_1"))
4679
+ beam = 1.1331 * h[0].header["BMAJ"] * h[0].header["BMIN"] / pix ** 2
4680
+ x, y = w.world_to_pixel_values(ra, dec)
4681
+ yy, xx = np.mgrid[:d.shape[0], :d.shape[1]]
4682
+ rr = np.hypot(xx - x, yy - y) * pix * 3600
4683
+ ok = np.isfinite(d)
4684
+ inner, outer = d[(rr <= radius_arcsec) & ok], d[(rr > radius_arcsec) & ok]
4685
+ if not len(inner) or len(outer) < 50:
4686
+ continue
4687
+ noise = 1.4826 * float(np.median(np.abs(outer - np.median(outer))))
4688
+ out.append((str(r["obs_id"]).split(".")[0], float(inner.max() / noise), float(inner.sum() / beam * 1e3)))
4689
+ except Exception:
4690
+ continue
4691
+ return out
4692
 
4693
 
4694
  def switchoff_main(record=False, flux_min_mjy=100.0, major_max_arcsec=25.0, radius_arcsec=20.0, dec_min=-40.0, hole_deg=0.25, b_min=10.0, bright_jy=5.0, bright_deg=0.5,
4695
+ racs_dec_max=41.0, later_arcsec=30.0, lobe_arcsec=90.0, image_sigma=10.0):
4696
  rows = core.tap("vizier", 'SELECT NVSS, RAJ2000, DEJ2000, "S1.4", MajAxis, MinAxis FROM "VIII/65/nvss" WHERE "S1.4" > %g AND DEJ2000 > %g' % (flux_min_mjy, dec_min), timeout=600)
4697
  sk = next(k for k in rows[0] if k.replace("_", ".").lower() == "s1.4") if rows else "S1.4"
4698
  src = [dict(name=str(r["NVSS"]).strip(), ra=float(r["RAJ2000"]), dec=float(r["DEJ2000"]), s=float(r[sk]), maj=num(r["MajAxis"]), min_=num(r["MinAxis"])) for r in rows]
 
4734
  s["around"] = int(n[0]["n"]) if n else 0
4735
  if s["around"] == 0:
4736
  s["vet"] = "catalogue-dropped"
4737
+ # the rest in the surveys made after VLASS epoch 1 (RACS-mid of 2020-21, RACS-high, RACS-low3, LoTSS DR2), as a lobe of a brighter source those surveys and TGSS catalogue
4738
+ # as one source within LOBE_ARCSEC (five times the NVSS flux at 1.4 GHz, or twenty-five times at 150 MHz), and in the VLASS images themselves
4739
+ later = (("J/other/PASA/41.3/sourcesm", "RACS-mid"), ("J/other/PASA/42.38/sourcesh", "RACS-high"), ("J/other/PASA/43.89/sources", "RACS-low3"), ("J/A+A/659/A1/catalog", "LoTSS DR2"))
4740
+ rest = [s for s in gone if s["vet"] is None]
4741
+ for cat, label in later:
4742
+ for m in core.xmatch([dict(source_id=s["name"], ra=s["ra"], dec=s["dec"]) for s in rest if s["vet"] is None], cat, later_arcsec):
4743
+ f = num(m.get("Ftot")) or num(m.get("Stotal")) or num(m.get("SpeakTot")) or num(m.get("Fpk"))
4744
+ for s in rest:
4745
+ if s["name"] == m["source_id"] and s["vet"] is None:
4746
+ s["vet"], s["later"] = "catalogue-dropped", "%s %s mJy at %.0f arcsec" % (label, "%.0f" % f if f else "?", float(m["angDist"]))
4747
+ for cat, label, factor in (("J/other/PASA/41.3/sourcesm", "RACS-mid", 5.0), ("J/A+A/598/A78/table3", "TGSS", 25.0)):
4748
+ for m in core.xmatch([dict(source_id=s["name"], ra=s["ra"], dec=s["dec"]) for s in rest if s["vet"] is None], cat, lobe_arcsec):
4749
+ f = num(m.get("Ftot")) or num(m.get("Stotal"))
4750
+ for s in rest:
4751
+ if s["name"] == m["source_id"] and s["vet"] is None and f and f > factor * s["s"] and float(m["angDist"]) > later_arcsec:
4752
+ s["vet"], s["later"] = "radio-hotspot", "%s %.0f mJy at %.0f arcsec" % (label, f, float(m["angDist"]))
4753
+ for s in rest:
4754
+ if s["vet"] is None:
4755
+ seen_img = [x for x in switchoff_vlass_images(s["ra"], s["dec"]) if x[1] > image_sigma]
4756
+ if seen_img:
4757
+ s["vet"], s["later"] = "catalogue-dropped", "VLASS images %s" % ", ".join("%s %.0f sigma, %.0f mJy" % x for x in seen_img)
4758
  left = [s for s in gone if s["vet"] is None]
4759
  print("%d NVSS sources above %g mJy north of %g deg, %d compact under %g arcsec more than %g deg from the Galactic plane; without a VLASS component within %g arcsec: %d (%d of "
4760
  "known SIMBAD types, %d within %g deg of a source above %g Jy, %d still shining in RACS-low of 2019-2020 or in holes of the catalogue with no component within %g deg, %d of "
 
4763
  sum(s["vet"] == "catalogue-dropped" for s in gone), hole_deg, sum(1 for s in gone if s["racs_mjy"] is not None), len(left)))
4764
  for s in sorted(gone, key=lambda s: -s["s"]):
4765
  if s["vet"] != "natural-type":
4766
+ print(" NVSS %s: %.0f mJy, %.0f x %.0f arcsec at RA %.4f Dec %+.4f, b %+.1f, RACS %s mJy, %s components within %g deg%s; SIMBAD %s%s; %s" % (
4767
  s["name"], s["s"], s["maj"], s["min_"] or 0, s["ra"], s["dec"], s["b"], s["racs_mjy"], s["around"], hole_deg, ", near " + s["bright"] if s.get("bright") else "",
4768
+ s["simbad"], "; " + s["later"] if s.get("later") else "", s["vet"] or "unexplained"))
4769
  json.dump(dict(n=len(src), compact=len(compact), gone=gone), open(core.results("radio_switchoffs.json"), "w"), indent=1)
4770
  if record:
4771
  core.record_run(
 
4780
  len(gone), len(compact), sum(s["vet"] == "natural-type" for s in gone), sum(s["vet"] == "bright-neighbour" for s in gone), bright_jy,
4781
  sum(s["vet"] == "catalogue-dropped" for s in gone), len(left)),
4782
  [dict(target="nvss:%s" % s["name"], stat=s["s"], unit="mJy at 1.4 GHz, absent from VLASS", vet=s["vet"],
4783
+ note="%.0f x %.0f arcsec; b %+.1f; RACS %s mJy; %s components within %g deg%s; SIMBAD %s%s" % (s["maj"], s["min_"] or 0, s["b"], s["racs_mjy"], s["around"], hole_deg,
4784
+ ", near " + s["bright"] if s.get("bright") else "", s["simbad"],
4785
+ "; " + s["later"] if s.get("later") else "")) for s in gone])
4786
  print("recorded")
4787
 
4788
 
 
5114
  print("recorded")
5115
 
5116
 
5117
+ hostlessnir_DOC = r"""Hosts of the hostless radio sources in the near infrared: the compact CRATES sources the hostless test left bare, against VISTA's VHS DR5 and VIKING DR2 and UKIDSS's LAS DR9 within 2 arcsec, coverage judged by any catalogue source within 1 arcmin, and each K magnitude, or the survey's depth where none is found, turned into a redshift by the K-z relation of radio galaxies (Willott et al. 2003: K = 17.37 + 4.53 log z - 0.31 (log z)^2); a radio galaxy's host follows that relation, so a detection dates the source and a deep non-detection puts it far away; and the HSC-SSP DR3 g, r and z images through the Legacy Survey viewer, the signal within an arcsecond against the same aperture at 200 random places in the cutout.
5118
 
5119
+ python -I seti.py radio_sky hostlessnir [record] [--arcsec 2] [--hsc-pix 0.168]"""
5120
 
5121
  HOSTLESS_NIR = (("VHS DR5", "II/367/vhs_dr5", 18.1), ("VIKING DR2", "II/343/viking2", 19.2), ("UKIDSS LAS DR9", "II/319/las9", 18.2))
5122
 
 
5133
  return 10 ** (0.5 * (lo + hi))
5134
 
5135
 
5136
+ def hostlessnir_main(record=False, arcsec=2.0, hsc_pix=0.168):
5137
  bare = [b for b in json.load(open(core.results("crates_hostless.json"))) if b.get("vet") is None]
5138
  up = [dict(source_id=k, ra=b["ra"], dec=b["dec"]) for k, b in enumerate(bare)]
5139
  for b in bare:
 
5162
  b["k"], b["z"], b["z_kind"] = depth, kz_redshift(depth), "lower limit"
5163
  else:
5164
  b["k"], b["z"], b["z_kind"] = None, None, "not covered"
5165
+ # HSC-SSP DR3 through the Legacy Survey viewer: the signal within an arcsecond against the same aperture placed at random in the cutout
5166
+ import io
5167
+ from astropy.io import fits
5168
+ rng = np.random.default_rng(5)
5169
+ for b in bare:
5170
+ b["hsc"] = None
5171
+ raw = core.get("https://www.legacysurvey.org/viewer/fits-cutout?" + urllib.parse.urlencode(
5172
+ dict(ra="%.6f" % b["ra"], dec="%.6f" % b["dec"], layer="hsc-dr3", pixscale=hsc_pix, bands="grz", size=101)), timeout=120, soft=True)
5173
+ if not raw:
5174
+ continue
5175
+ cube = np.atleast_3d(fits.open(io.BytesIO(raw))[0].data.astype(float))
5176
+ cube = cube if cube.shape[0] == 3 else np.moveaxis(cube, -1, 0)
5177
+ if not np.any(np.nan_to_num(cube)):
5178
+ continue
5179
+ yy, xx = np.mgrid[:101, :101]
5180
+ snr = []
5181
+ for img in cube:
5182
+ img = np.nan_to_num(img)
5183
+ ap = np.hypot(xx - 50, yy - 50) * hsc_pix <= 1.0
5184
+ rand = [img[np.hypot(xx - x, yy - y) * hsc_pix <= 1.0].sum() for x, y in rng.integers(10, 91, size=(200, 2))]
5185
+ snr.append(round(float((img[ap].sum() - np.median(rand)) / (1.4826 * np.median(np.abs(rand - np.median(rand))))), 1))
5186
+ b["hsc"] = snr
5187
  det = [b for b in bare if b["z_kind"] == "estimate"]
5188
  lim = [b for b in bare if b["z_kind"] == "lower limit"]
5189
+ hsc = [b for b in bare if b["hsc"] is not None]
5190
+ print("%d hostless sources: %d with a near-infrared counterpart within %g arcsec, %d covered with none, %d outside the surveys; HSC-SSP DR3 covers %d: %s" % (
5191
+ len(bare), len(det), arcsec, len(lim), len(bare) - len(det) - len(lim), len(hsc), "; ".join("%s S/N g r z %s" % (b["name"], b["hsc"]) for b in hsc)))
5192
  for b in sorted(bare, key=lambda b: -(b["z"] or 0)):
5193
  print(" %s: %s; K %s, z %s (%s)" % (b["name"], b["nir"] or ("covered by " + ", ".join(b["covered"]) if b["covered"] else "not covered"), "%.2f" % b["k"] if b["k"] else "-",
5194
  "%.1f" % b["z"] if b["z"] else "-", b["z_kind"]))
 
5198
  "crates_hostless_nir", "Hosts of the hostless radio sources in the near infrared", "VHS DR5, VIKING DR2 and UKIDSS LAS DR9 by CDS XMatch; the K-z relation of Willott et al. (2003)",
5199
  "the hostless sources of crates_hostless_flat_spectrum: %d" % len(bare), os.path.abspath(__file__), "hostlessnir", len(bare), "sources", dict(arcsec=arcsec),
5200
  "each survey's depth (Ks 18.1, 19.2 and K 18.2) on the K-z relation", "a host in the near infrared, or a depth that puts it far away",
5201
+ "%d with a counterpart, redshifts %s; %d covered with none, lower limits %s; %d outside the surveys; %d in HSC-SSP DR3, %d of them detected at S/N 5 in g, r or z" % (
5202
+ len(det), ", ".join("%.1f" % b["z"] for b in det), len(lim), ", ".join("%.1f" % b["z"] for b in lim), len(bare) - len(det) - len(lim),
5203
+ len(hsc), sum(max(b["hsc"]) >= 5 for b in hsc)),
5204
  [dict(target="crates:%s" % b["name"], stat=round(b["z"], 2) if b["z"] else None, unit="redshift on the K-z relation (%s)" % b["z_kind"], vet=None,
5205
+ note="K %s from %s%s" % ("%.2f" % b["k"] if b["k"] else "-", ", ".join(b["nir"]) or ", ".join(b["covered"]) or "no survey",
5206
+ "; HSC S/N g r z %s" % b["hsc"] if b["hsc"] is not None else "")) for b in bare])
5207
  print("recorded")
5208
 
5209
 
setitools/solar_system.py CHANGED
@@ -1361,7 +1361,9 @@ darkcomet_DOC = r"""One dark-comet candidate: NEOWISE NEATM size and albedo, and
1361
  python -I seti.py solar_system darkcomet locus DESIG --night YYYY-MM-DD (the positions the other apparitions allow, A2 held at each value)
1362
  python -I seti.py solar_system darkcomet forecast DESIG (daily ephemeris of both orbits at the next apparition, and the A2 it would measure)
1363
  python -I seti.py solar_system darkcomet census DESIG --night YYYY-MM-DD [--workers 6] (moving sources in the whole CFHT frames, injected
1364
- copies of the object, and the locus searched; needs the frames in cfht_<night>/full)"""
 
 
1365
 
1366
  darkcomet_ROOT = os.environ.get("DARKCOMET_ROOT", core.data("darkcomet"))
1367
  darkcomet_BANDS = {"w1": (3.3526e-6, 309.540), "w2": (4.6028e-6, 171.787)} # isophotal wavelength (m), zero point (Jy)
@@ -1640,8 +1642,8 @@ def darkcomet_observers(rows, sites, eph):
1640
  return tdb, out
1641
 
1642
 
1643
- def darkcomet_propagate(eph, t0, state, a2, times, a1=0.0):
1644
- """Barycentric positions at TDB JDs from a state at t0 in ASSIST, with transverse a2 and radial a1 (au/d^2 at 1 au, r^-2)."""
1645
  import assist
1646
  import rebound
1647
  out = np.zeros((len(times), 3))
@@ -1655,7 +1657,7 @@ def darkcomet_propagate(eph, t0, state, a2, times, a1=0.0):
1655
  sim.t = t0 - eph.jd_ref
1656
  sim.dt = -1.0 if times[sel[0]] < t0 else 1.0
1657
  ex = assist.Extras(sim, eph)
1658
- ex.particle_params = np.array([a1, a2, 0.0])
1659
  ex.alpha, ex.nk, ex.nm, ex.nn, ex.r0 = 1.0, 0.0, 2.0, 1.0, 1.0
1660
  for i in sel:
1661
  sim.integrate(times[i] - eph.jd_ref)
@@ -1939,6 +1941,198 @@ def darkcomet_refit(desig, ephem_dir=None):
1939
  return out
1940
 
1941
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1942
  darkcomet_POOL = {}
1943
 
1944
 
@@ -3498,7 +3692,7 @@ def darkcomet_stack(desig, vmax=21.6, half=20):
3498
  def darkcomet_cli():
3499
  p = argparse.ArgumentParser()
3500
  p.add_argument("mode", choices=("fetch", "thermal", "refit", "record", "images", "precovery", "robust", "frames", "field", "stack",
3501
- "blockcov", "locus", "forecast", "census", "variants"))
3502
  p.add_argument("desig")
3503
  p.add_argument("--ephem", default=None)
3504
  p.add_argument("--night", default=None, help="UTC date of the CFHT images to re-measure (precovery, frames, field)")
@@ -3534,6 +3728,10 @@ def darkcomet_cli():
3534
  darkcomet_census(a.desig, a.night, a.workers)
3535
  elif a.mode == "variants":
3536
  darkcomet_thermal_variants(a.desig)
 
 
 
 
3537
  else:
3538
  darkcomet_record(a.desig)
3539
 
@@ -6104,10 +6302,14 @@ def spinsurvey_main(record=False, rho=2000.0, d_min_km=0.3, kpa_min=1.0, km_d=1.
6104
  print("recorded")
6105
 
6106
 
6107
- fireballs_DOC = r"""Fireballs from outside the Solar System: every fireball of the CNEOS database (the JPL fireball API) with a location and a pre-entry velocity vector, the vector taken in Earth-fixed axes into barycentric axes, Earth's gravity removed from its speed, Earth's orbital velocity added, and the heliocentric speed set against the Sun's escape speed at Earth's distance; an interstellar body or probe striking Earth would arrive faster than that speed allows for anything bound, and for each fast one the fraction by which its speed would have to be overestimated for the orbit to be bound; the entries whose listed speed and vector disagree by more than 0.5 km/s are counted apart. Each fast one is redrawn with the errors that CNEOS shows against ground-based networks (Peña-Asensio et al. 2025: about 6 km/s in speed and 20 deg in radiant before 2018, 0.55 km/s and 1.1 deg from 2018), and one bound in more than 1 per cent of the draws is within the sensors' errors.
6108
 
6109
  python -I seti.py solar_system fireballs [record] [--margin-kms 0] [--mismatch-kms 0.5] [--draws 20000] [--p-bound 0.01]"""
6110
 
 
 
 
 
6111
 
6112
  def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000, p_bound=0.01):
6113
  from astropy.coordinates import ITRS, GCRS, CartesianRepresentation, CartesianDifferential, EarthLocation, get_body_barycentric_posvel
@@ -6116,6 +6318,7 @@ def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000,
6116
  d = json.loads(core.get("https://ssd-api.jpl.nasa.gov/fireball.api?req-loc=true&req-vel=true&vel-comp=true", timeout=120))
6117
  f = d["fields"]
6118
  out = []
 
6119
  for row in d["data"]:
6120
  r = dict(zip(f, row))
6121
  if not all(r.get(k) for k in ("vx", "vy", "vz", "lat", "lon", "alt", "vel")):
@@ -6146,8 +6349,17 @@ def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000,
6146
  mid = 0.5 * (lo_s + hi_s)
6147
  lo_s, hi_s = (mid, hi_s) if helio(mid) < vesc_s else (lo_s, mid)
6148
  cut = 1 - lo_s / float(np.linalg.norm(vg)) if vh > vesc_s else 0.0
 
 
 
 
 
 
 
 
 
6149
  out.append(dict(date=r["date"], energy_kt=core.num(r["impact-e"]), vel=float(r["vel"]), vmag=float(np.linalg.norm(v)), v_helio=vh, v_esc=vesc_s, cut=cut,
6150
- _u=unit, _s=float(np.linalg.norm(vg)), _ve=vesc_e, _vE=vearth,
6151
  lat=lat, lon=lon, alt=float(r["alt"])))
6152
  for o in out:
6153
  o["consistent"] = abs(o["vel"] - o["vmag"]) <= mismatch_kms
@@ -6169,7 +6381,7 @@ def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000,
6169
  vh_d = np.linalg.norm(uu * vinf[:, None] + o["_vE"][None, :], axis=1)
6170
  o["p_bound"] = float(np.mean(vh_d < o["v_esc"]))
6171
  o["era"] = "from 2018" if late else "before 2018"
6172
- o["vet"] = "sensor-error" if o["p_bound"] > p_bound else None
6173
  for o in out:
6174
  for k in ("_u", "_s", "_ve", "_vE"):
6175
  o.pop(k, None)
@@ -6179,8 +6391,9 @@ def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000,
6179
  "bound in more than %g of the draws within CNEOS's errors: %d; beyond them: %d" % (len(out), sum(o["consistent"] for o in out), mismatch_kms, len(hyp), len(hyp_ok), p_bound,
6180
  len(hyp) - len(left), len(left)))
6181
  for o in sorted(hyp, key=lambda o: -o["excess"]):
6182
- print(" %s: %.1f km/s listed (vector %.1f), heliocentric %.1f against %.1f km/s (+%.1f), bound if the speed is %.1f per cent too high, bound in %.3f of the draws (%s); impact energy %s kt, %.1f %.1f; %s" % (
6183
- o["date"], o["vel"], o["vmag"], o["v_helio"], o["v_esc"], o["excess"], 100 * o["cut"], o["p_bound"], o["era"], o["energy_kt"], o["lat"], o["lon"], o["vet"] or "unexplained"))
 
6184
  json.dump(out, open(core.results("cneos_fireballs.json"), "w"), indent=1, default=float)
6185
  if record:
6186
  core.record_run(
@@ -6190,8 +6403,10 @@ def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000,
6190
  "a fireball arriving faster than anything bound to the Sun beyond the sensors' errors",
6191
  "%d above the escape speed, %d of them bound in more than %g of the draws within CNEOS's errors; %d beyond them" % (len(hyp), len(hyp) - len(left), p_bound, len(left)),
6192
  [dict(target="fireball:%s" % o["date"].replace(" ", "T"), stat=round(o["excess"], 2), unit="km/s above the Sun's escape speed", vet=o["vet"],
6193
- note="listed %.1f km/s, heliocentric %.1f, bound if the speed is %.1f per cent too high, bound in %.3f of the draws (%s)" % (
6194
- o["vel"], o["v_helio"], 100 * o["cut"], o["p_bound"], o["era"])) for o in hyp])
 
 
6195
  print("recorded")
6196
 
6197
 
 
1361
  python -I seti.py solar_system darkcomet locus DESIG --night YYYY-MM-DD (the positions the other apparitions allow, A2 held at each value)
1362
  python -I seti.py solar_system darkcomet forecast DESIG (daily ephemeris of both orbits at the next apparition, and the A2 it would measure)
1363
  python -I seti.py solar_system darkcomet census DESIG --night YYYY-MM-DD [--workers 6] (moving sources in the whole CFHT frames, injected
1364
+ copies of the object, and the locus searched; needs the frames in cfht_<night>/full)
1365
+ python -I seti.py solar_system darkcomet normal DESIG [--ephem DIR] (gravity, A2, A2 and A3, all three terms, with and without JPL's radar delays)
1366
+ python -I seti.py solar_system darkcomet normal-record DESIG"""
1367
 
1368
  darkcomet_ROOT = os.environ.get("DARKCOMET_ROOT", core.data("darkcomet"))
1369
  darkcomet_BANDS = {"w1": (3.3526e-6, 309.540), "w2": (4.6028e-6, 171.787)} # isophotal wavelength (m), zero point (Jy)
 
1642
  return tdb, out
1643
 
1644
 
1645
+ def darkcomet_propagate(eph, t0, state, a2, times, a1=0.0, a3=0.0):
1646
+ """Barycentric positions at TDB JDs from a state at t0 in ASSIST, with transverse a2, radial a1 and normal a3 (au/d^2 at 1 au, r^-2)."""
1647
  import assist
1648
  import rebound
1649
  out = np.zeros((len(times), 3))
 
1657
  sim.t = t0 - eph.jd_ref
1658
  sim.dt = -1.0 if times[sel[0]] < t0 else 1.0
1659
  ex = assist.Extras(sim, eph)
1660
+ ex.particle_params = np.array([a1, a2, a3])
1661
  ex.alpha, ex.nk, ex.nm, ex.nn, ex.r0 = 1.0, 0.0, 2.0, 1.0, 1.0
1662
  for i in sel:
1663
  sim.integrate(times[i] - eph.jd_ref)
 
1941
  return out
1942
 
1943
 
1944
+ # radar stations of the JPL radar astrometry: geodetic longitude, latitude (deg) and height (m)
1945
+ darkcomet_RADAR_SITES = {"-1": (-66.75278, 18.34417, 497.0), "-13": (-116.79445, 35.24773, 1071.0), "-14": (-116.88954, 35.42590, 1002.0)}
1946
+ darkcomet_NG = ("A1", "A2", "A3")
1947
+ darkcomet_NG_SETS = ([], [1], [1, 2], [0, 1, 2])
1948
+
1949
+
1950
+ def darkcomet_radar(desig):
1951
+ """JPL's centre-of-mass round-trip delays of a body from stations with known coordinates: [(UTC receive time, delay s, sigma s, receiver, transmitter)]."""
1952
+ d = darkcomet_dir(desig)
1953
+ path = os.path.join(d, "radar.json")
1954
+ if not os.path.exists(path):
1955
+ open(path, "wb").write(core.get("https://ssd-api.jpl.nasa.gov/sb_radar.api?" + urllib.parse.urlencode({"des": desig}), timeout=60))
1956
+ js = json.load(open(path))
1957
+ # a body without radar comes back as the JSON text quoted once more
1958
+ js = json.loads(js) if isinstance(js, str) else js
1959
+ rows = [dict(zip(js["fields"], r)) for r in js.get("data", [])]
1960
+ return [(r["epoch"], float(r["value"]) * 1e-6, float(r["sigma"]) * 1e-6, r["rcvr"], r["xmit"]) for r in rows
1961
+ if r["units"] == "us" and r["bp"] == "C" and r["rcvr"] in darkcomet_RADAR_SITES and r["xmit"] in darkcomet_RADAR_SITES]
1962
+
1963
+
1964
+ def darkcomet_delay(eph, t0, q, ng, epoch, rcvr, xmit):
1965
+ """Computed round-trip delay (s) received at a UTC epoch: light time iterated on each leg, with the Sun's Shapiro delay on both."""
1966
+ import astropy.units as u
1967
+ from astropy.coordinates import EarthLocation
1968
+ from astropy.time import Time
1969
+ c = 2.99792458e8
1970
+
1971
+ def station(code, t):
1972
+ lon, lat, h = darkcomet_RADAR_SITES[code]
1973
+ e = eph.get_particle("earth", t.tdb.jd - eph.jd_ref)
1974
+ g, _ = EarthLocation.from_geodetic(lon * u.deg, lat * u.deg, h * u.m).get_gcrs_posvel(t)
1975
+ return np.array([e.x, e.y, e.z]) + np.array([g.x.to_value(u.m), g.y.to_value(u.m), g.z.to_value(u.m)]) / darkcomet_AU
1976
+
1977
+ def body(tb):
1978
+ return darkcomet_propagate(eph, t0, q, ng[1], np.array([tb]), a1=ng[0], a3=ng[2])[0]
1979
+
1980
+ t_rx = Time(epoch.replace(" ", "T"), scale="utc")
1981
+ r_rx = station(rcvr, t_rx)
1982
+ t_b, down = t_rx.tdb.jd, 0.0
1983
+ for _ in range(4):
1984
+ r_b = body(t_b)
1985
+ down = np.linalg.norm(r_b - r_rx) * darkcomet_AU / c
1986
+ t_b = t_rx.tdb.jd - down / 86400.0
1987
+ up, t_tx = 0.0, t_rx
1988
+ for _ in range(4):
1989
+ r_tx = station(xmit, t_tx)
1990
+ up = np.linalg.norm(r_b - r_tx) * darkcomet_AU / c
1991
+ t_tx = t_rx - (down + up) * u.s
1992
+ s = eph.get_particle("sun", t_b - eph.jd_ref)
1993
+ sun = np.array([s.x, s.y, s.z])
1994
+
1995
+ def shapiro(a, b):
1996
+ ra_, rb_, rho = (np.linalg.norm(a - sun) * darkcomet_AU, np.linalg.norm(b - sun) * darkcomet_AU, np.linalg.norm(a - b) * darkcomet_AU)
1997
+ return 2 * 1.32712440018e20 / c ** 3 * math.log((ra_ + rb_ + rho) / (ra_ + rb_ - rho))
1998
+ return up + down + shapiro(r_tx, r_b) + shapiro(r_b, r_rx)
1999
+
2000
+
2001
+ def darkcomet_ngfit(eph, t0, p0, free, t_emit, obs_pos, ra, dec, sigma, radar=(), iters=12):
2002
+ """Gauss-Newton on the state and the free terms among A1, A2, A3 (indices into darkcomet_NG), with any radar delays as further residuals."""
2003
+ p = np.array(list(p0[:6]) + [0.0] * len(free), float)
2004
+ h = np.array([1e-9] * 3 + [1e-11] * 3 + [1e-14] * len(free))
2005
+ keep = np.ones(len(ra), bool)
2006
+
2007
+ def terms(q):
2008
+ ng = [0.0, 0.0, 0.0]
2009
+ for k, j in enumerate(free):
2010
+ ng[j] = q[6 + k]
2011
+ return ng
2012
+
2013
+ def resid(q):
2014
+ ng = terms(q)
2015
+ pos = darkcomet_propagate(eph, t0, q[:6], ng[1], t_emit, a1=ng[0], a3=ng[2]) - obs_pos
2016
+ mra, mdec = darkcomet_radec(pos)
2017
+ dra = ((ra - mra + 180.0) % 360.0 - 180.0) * np.cos(np.radians(dec)) * 3600.0
2018
+ out = [dra / sigma, (dec - mdec) * 3600.0 / sigma]
2019
+ out += [np.array([(tau - darkcomet_delay(eph, t0, q[:6], ng, ep, rx, tx)) / sg for ep, tau, sg, rx, tx in radar])]
2020
+ return np.concatenate(out)
2021
+
2022
+ cov = None
2023
+ n = len(ra)
2024
+ for _ in range(iters):
2025
+ r0 = resid(p)
2026
+ J = np.zeros((len(r0), len(p)))
2027
+ for k in range(len(p)):
2028
+ q = p.copy()
2029
+ q[k] += h[k]
2030
+ J[:, k] = (resid(q) - r0) / h[k]
2031
+ kk = np.concatenate([keep, keep, np.ones(len(radar), bool)])
2032
+ A, b = J[kk], r0[kk]
2033
+ s = np.linalg.norm(A, axis=0)
2034
+ cov = np.linalg.inv((A / s).T @ (A / s)) / np.outer(s, s)
2035
+ dp = -cov @ (A.T @ b)
2036
+ p = p + dp
2037
+ r1 = resid(p)
2038
+ new = r1[:n] ** 2 + r1[n:2 * n] ** 2 < darkcomet_CHI2_OUT
2039
+ if np.all(np.abs(dp) < 1e-3 * np.sqrt(np.diag(cov))) and np.array_equal(new, keep):
2040
+ break
2041
+ keep = new
2042
+ r = resid(p)
2043
+ chi = r[:n] ** 2 + r[n:2 * n] ** 2
2044
+ return p, cov, chi, keep, r[2 * n:]
2045
+
2046
+
2047
+ def darkcomet_normal(desig, ephem_dir=None):
2048
+ """Refits with gravity alone, A2, A2 and A3, and A1, A2 and A3, with and without JPL's radar delays, under site weights and with each night as one position; A3 with each apparition left out."""
2049
+ S = darkcomet_setup(desig, ephem_dir)
2050
+ d, eph, rows, tdb, obs_pos, ra, dec, lab, t0, p0, t_emit, sigma = (S[k] for k in (
2051
+ "d", "eph", "rows", "tdb", "obs_pos", "ra", "dec", "lab", "t0", "p0", "t_emit", "sigma"))
2052
+ radar = darkcomet_radar(desig)
2053
+ out = dict(n_obs=len(rows), radar=[dict(epoch=ep, delay_s=tau, sigma_s=sg, rcvr=rx, xmit=tx) for ep, tau, sg, rx, tx in radar], fits={}, left_out={},
2054
+ apparitions=["%d-%02d" % darkcomet_ym(tdb[lab == k].min()) for k in range(lab.max() + 1)])
2055
+ for scheme in ("none", "night"):
2056
+ sg = sigma * darkcomet_night_factor(rows, scheme)
2057
+ fits = {}
2058
+ for use in ((False, True) if radar else (False,)):
2059
+ for free in darkcomet_NG_SETS:
2060
+ p, cov, chi, keep, rr = darkcomet_ngfit(eph, t0, p0, free, t_emit, obs_pos, ra, dec, sg, radar if use else ())
2061
+ name = "%s|%s|%s" % (scheme, "radar" if use else "optical", " ".join(darkcomet_NG[j] for j in free) or "gravity only")
2062
+ ng = [0.0, 0.0, 0.0]
2063
+ for k, j in enumerate(free):
2064
+ ng[j] = p[6 + k]
2065
+ res = [float((tau - darkcomet_delay(eph, t0, p[:6], ng, ep, rx, tx)) * 1e6) for ep, tau, s_, rx, tx in radar]
2066
+ fits[name] = dict(chi=chi.tolist(), keep=keep.tolist(), npar=6 + len(free), radar_residual_us=res,
2067
+ terms={darkcomet_NG[j]: [float(p[6 + k]), float(math.sqrt(cov[6 + k, 6 + k]))] for k, j in enumerate(free)})
2068
+ # each model judged on the observations every model of this weighting keeps
2069
+ common = np.logical_and.reduce([np.array(f["keep"]) for f in fits.values()])
2070
+ for name, f in fits.items():
2071
+ f["chi2_common"] = float(np.sum(np.array(f["chi"])[common]))
2072
+ f["n_common"] = int(common.sum())
2073
+ f["bic"] = f["chi2_common"] + f["npar"] * math.log(2 * common.sum())
2074
+ f["kept"] = int(np.sum(f.pop("keep")))
2075
+ f.pop("chi")
2076
+ print("%-36s chi2 %7.1f on %d common, kept %d, BIC %7.1f; delay residuals %s us; %s" % (
2077
+ name, f["chi2_common"], f["n_common"], f["kept"], f["bic"], ", ".join("%+.2f" % x for x in f["radar_residual_us"]) or "none",
2078
+ ", ".join("%s %+.3e +- %.1e (%.1f sigma)" % (k, v[0], v[1], v[0] / v[1]) for k, v in f["terms"].items())), flush=True)
2079
+ out["fits"].update(fits)
2080
+ for k in range(lab.max() + 1):
2081
+ m = lab != k
2082
+ try:
2083
+ p, cov = darkcomet_ngfit(eph, t0, p0, [1, 2], t_emit[m], obs_pos[m], ra[m], dec[m], sigma[m], radar)[:2]
2084
+ except np.linalg.LinAlgError:
2085
+ # the remaining apparitions do not determine the orbit with both terms
2086
+ print(" without %s (%d obs): A2 and A3 undetermined by the rest" % (out["apparitions"][k], (~m).sum()), flush=True)
2087
+ continue
2088
+ out["left_out"][out["apparitions"][k]] = dict(n=int((~m).sum()), A3=float(p[7]), A3_sigma=float(math.sqrt(cov[7, 7])))
2089
+ x = out["left_out"][out["apparitions"][k]]
2090
+ print(" without %s (%d obs): A3 %+.3e +- %.1e (%.1f sigma)" % (out["apparitions"][k], x["n"], x["A3"], x["A3_sigma"], x["A3"] / x["A3_sigma"]), flush=True)
2091
+ json.dump(out, open(os.path.join(d, "normal.json"), "w"), indent=1)
2092
+ return out
2093
+
2094
+
2095
+ def darkcomet_normal_record(desig):
2096
+ """Record the normal-term refits: A3 with A2 and with all three terms, radar included, under both weightings, and the BIC margins."""
2097
+ d = darkcomet_dir(desig)
2098
+ nf = json.load(open(os.path.join(d, "normal.json")))
2099
+ f = nf["fits"]
2100
+ src = "radar" if nf["radar"] else "optical"
2101
+
2102
+ def a3(key):
2103
+ t = f[key]["terms"]["A3"]
2104
+ return "%+.2e +- %.1e (%.1f sigma)" % (t[0], t[1], t[0] / t[1])
2105
+
2106
+ def margin(scheme):
2107
+ b = {k.split("|")[2]: v["bic"] for k, v in f.items() if k.startswith("%s|%s|" % (scheme, src))}
2108
+ best_without = min(v for k, v in b.items() if "A3" not in k)
2109
+ return best_without - min(b["A2 A3"], b["A1 A2 A3"])
2110
+
2111
+ loo = nf["left_out"]
2112
+ n3 = min(abs(v["A3"] / v["A3_sigma"]) for v in loo.values())
2113
+ lead = min(("none", "night"), key=lambda s: abs(f["%s|%s|A1 A2 A3" % (s, src)]["terms"]["A3"][0] / f["%s|%s|A1 A2 A3" % (s, src)]["terms"]["A3"][1]))
2114
+ lt = f["%s|%s|A1 A2 A3" % (lead, src)]["terms"]["A3"]
2115
+ run = "darkcomet_normal_" + desig.replace(" ", "_").lower()
2116
+ radar_txt = ("; %d radar delay%s fitted to %s us" % (len(nf["radar"]), "" if len(nf["radar"]) == 1 else "s",
2117
+ ", ".join("%+.1f" % x for x in f["none|radar|A1 A2 A3"]["radar_residual_us"]))
2118
+ if nf["radar"] else "")
2119
+ core.record_search(
2120
+ run, "Normal acceleration of a dark comet", archive="MPC observations; JPL SBDB, Horizons and radar astrometry",
2121
+ release="%d observations, %d radar delays" % (nf["n_obs"], len(nf["radar"])),
2122
+ selection=desig, code=os.path.abspath(__file__), entry="darkcomet", n_targets=1, n_unit="asteroids",
2123
+ params=dict(sigma_default=0.5, sigma_site=darkcomet_SIGMA, chi2_out=darkcomet_CHI2_OUT, g_r="r^-2", models=[" ".join(darkcomet_NG[j] for j in s) or "gravity" for s in darkcomet_NG_SETS]),
2124
+ null_summary={k: dict(chi2=v["chi2_common"], n=v["n_common"], bic=v["bic"]) for k, v in f.items()},
2125
+ sensitivity="A3 under site weights and with each night as one position, with and without the radar delays, and with each apparition left out",
2126
+ ledger="Bodies pushed out of their orbital planes",
2127
+ result="A3 with A1 and A2 free %s with site weights and %s with each night as one position; the BIC margin of a normal term is %+.0f and %+.0f, positive favouring it; "
2128
+ "with one apparition left out at a time A3 stays at %.1f sigma or more%s"
2129
+ % (a3("none|%s|A1 A2 A3" % src), a3("night|%s|A1 A2 A3" % src), margin("none"), margin("night"), n3, radar_txt))
2130
+ core.clear_targets(run)
2131
+ core.record_targets(run, [dict(target="mpc:" + desig, stat=lt[0] / lt[1], unit="A3 / sigma with A1 and A2 free, the less significant weighting",
2132
+ vet="dark-comet", note="A3 %+.2e au/d^2; Seligman et al. (2024) dark comet" % lt[0])])
2133
+ print("recorded %s" % run)
2134
+
2135
+
2136
  darkcomet_POOL = {}
2137
 
2138
 
 
3692
  def darkcomet_cli():
3693
  p = argparse.ArgumentParser()
3694
  p.add_argument("mode", choices=("fetch", "thermal", "refit", "record", "images", "precovery", "robust", "frames", "field", "stack",
3695
+ "blockcov", "locus", "forecast", "census", "variants", "normal", "normal-record"))
3696
  p.add_argument("desig")
3697
  p.add_argument("--ephem", default=None)
3698
  p.add_argument("--night", default=None, help="UTC date of the CFHT images to re-measure (precovery, frames, field)")
 
3728
  darkcomet_census(a.desig, a.night, a.workers)
3729
  elif a.mode == "variants":
3730
  darkcomet_thermal_variants(a.desig)
3731
+ elif a.mode == "normal":
3732
+ darkcomet_normal(a.desig, a.ephem)
3733
+ elif a.mode == "normal-record":
3734
+ darkcomet_normal_record(a.desig)
3735
  else:
3736
  darkcomet_record(a.desig)
3737
 
 
6302
  print("recorded")
6303
 
6304
 
6305
+ fireballs_DOC = r"""Fireballs from outside the Solar System: every fireball of the CNEOS database (the JPL fireball API) with a location and a pre-entry velocity vector, the vector taken in Earth-fixed axes into barycentric axes, Earth's gravity removed from its speed, Earth's orbital velocity added, and the heliocentric speed set against the Sun's escape speed at Earth's distance; an interstellar body or probe striking Earth would arrive faster than that speed allows for anything bound, and for each fast one the fraction by which its speed would have to be overestimated for the orbit to be bound; the entries whose listed speed and vector disagree by more than 0.5 km/s are counted apart. Each fast one is redrawn with the errors that CNEOS shows against ground-based networks (Peña-Asensio et al. 2025: about 6 km/s in speed and 20 deg in radiant before 2018, 0.55 km/s and 1.1 deg from 2018), and one bound in more than 1 per cent of the draws is within the sensors' errors; so is one that an independent published velocity (fireballs_STEREO: two satellites' lightning imagers triangulating the trail) brings below the escape speed.
6306
 
6307
  python -I seti.py solar_system fireballs [record] [--margin-kms 0] [--mismatch-kms 0.5] [--draws 20000] [--p-bound 0.01]"""
6308
 
6309
+ # independent pre-entry velocities (Earth-fixed km/s) with their speed errors, by CNEOS date: Silber et al. (2026, RNAAS 10, 183) triangulate
6310
+ # 2026-04-01 from GOES-East's Geostationary Lightning Mapper and MTG-I1's Lightning Imager, 83 deg apart, in two models
6311
+ fireballs_STEREO = {"2026-04-01 02:13:14": (((3.5, -28.3, 49.7), 2.0), ((3.5, -27.7, 49.4), 3.0))}
6312
+
6313
 
6314
  def fireballs_main(record=False, margin_kms=0.0, mismatch_kms=0.5, draws=20000, p_bound=0.01):
6315
  from astropy.coordinates import ITRS, GCRS, CartesianRepresentation, CartesianDifferential, EarthLocation, get_body_barycentric_posvel
 
6318
  d = json.loads(core.get("https://ssd-api.jpl.nasa.gov/fireball.api?req-loc=true&req-vel=true&vel-comp=true", timeout=120))
6319
  f = d["fields"]
6320
  out = []
6321
+ rng0 = np.random.default_rng(29)
6322
  for row in d["data"]:
6323
  r = dict(zip(f, row))
6324
  if not all(r.get(k) for k in ("vx", "vy", "vz", "lat", "lon", "alt", "vel")):
 
6349
  mid = 0.5 * (lo_s + hi_s)
6350
  lo_s, hi_s = (mid, hi_s) if helio(mid) < vesc_s else (lo_s, mid)
6351
  cut = 1 - lo_s / float(np.linalg.norm(vg)) if vh > vesc_s else 0.0
6352
+ # an independent velocity's heliocentric speed and the share of draws within its speed error that stay hyperbolic
6353
+ stereo = []
6354
+ for vs_, sv_ in fireballs_STEREO.get(r["date"], ()):
6355
+ it2 = ITRS(CartesianRepresentation(loc.x, loc.y, loc.z, differentials=CartesianDifferential(*(np.array(vs_) * u.km / u.s))), obstime=t)
6356
+ vg2 = it2.transform_to(GCRS(obstime=t)).velocity.d_xyz.to(u.km / u.s).value
6357
+ u2, s2 = vg2 / np.linalg.norm(vg2), float(np.linalg.norm(vg2))
6358
+ sp2 = s2 + sv_ * rng0.standard_normal(draws)
6359
+ vh2 = np.linalg.norm(u2[None, :] * np.sqrt(np.clip(sp2 ** 2 - vesc_e ** 2, 0, None))[:, None] + vearth[None, :], axis=1)
6360
+ stereo.append((float(np.linalg.norm(u2 * math.sqrt(max(s2 ** 2 - vesc_e ** 2, 0.0)) + vearth)), float(np.mean(vh2 > vesc_s))))
6361
  out.append(dict(date=r["date"], energy_kt=core.num(r["impact-e"]), vel=float(r["vel"]), vmag=float(np.linalg.norm(v)), v_helio=vh, v_esc=vesc_s, cut=cut,
6362
+ _u=unit, _s=float(np.linalg.norm(vg)), _ve=vesc_e, _vE=vearth, stereo=stereo,
6363
  lat=lat, lon=lon, alt=float(r["alt"])))
6364
  for o in out:
6365
  o["consistent"] = abs(o["vel"] - o["vmag"]) <= mismatch_kms
 
6381
  vh_d = np.linalg.norm(uu * vinf[:, None] + o["_vE"][None, :], axis=1)
6382
  o["p_bound"] = float(np.mean(vh_d < o["v_esc"]))
6383
  o["era"] = "from 2018" if late else "before 2018"
6384
+ o["vet"] = "sensor-error" if o["p_bound"] > p_bound or (o["stereo"] and min(x[0] for x in o["stereo"]) < o["v_esc"]) else None
6385
  for o in out:
6386
  for k in ("_u", "_s", "_ve", "_vE"):
6387
  o.pop(k, None)
 
6391
  "bound in more than %g of the draws within CNEOS's errors: %d; beyond them: %d" % (len(out), sum(o["consistent"] for o in out), mismatch_kms, len(hyp), len(hyp_ok), p_bound,
6392
  len(hyp) - len(left), len(left)))
6393
  for o in sorted(hyp, key=lambda o: -o["excess"]):
6394
+ print(" %s: %.1f km/s listed (vector %.1f), heliocentric %.1f against %.1f km/s (+%.1f), bound if the speed is %.1f per cent too high, bound in %.3f of the draws (%s)%s; impact energy %s kt, %.1f %.1f; %s" % (
6395
+ o["date"], o["vel"], o["vmag"], o["v_helio"], o["v_esc"], o["excess"], 100 * o["cut"], o["p_bound"], o["era"],
6396
+ "; triangulated %s" % ", ".join("%.1f km/s, hyperbolic in %.2f" % x for x in o["stereo"]) if o["stereo"] else "", o["energy_kt"], o["lat"], o["lon"], o["vet"] or "unexplained"))
6397
  json.dump(out, open(core.results("cneos_fireballs.json"), "w"), indent=1, default=float)
6398
  if record:
6399
  core.record_run(
 
6403
  "a fireball arriving faster than anything bound to the Sun beyond the sensors' errors",
6404
  "%d above the escape speed, %d of them bound in more than %g of the draws within CNEOS's errors; %d beyond them" % (len(hyp), len(hyp) - len(left), p_bound, len(left)),
6405
  [dict(target="fireball:%s" % o["date"].replace(" ", "T"), stat=round(o["excess"], 2), unit="km/s above the Sun's escape speed", vet=o["vet"],
6406
+ note="listed %.1f km/s, heliocentric %.1f, bound if the speed is %.1f per cent too high, bound in %.3f of the draws (%s)%s" % (
6407
+ o["vel"], o["v_helio"], 100 * o["cut"], o["p_bound"], o["era"],
6408
+ "; two lightning imagers' triangulated velocity (Silber et al. 2026) gives %s" % " and ".join("%.1f km/s heliocentric, hyperbolic in %.2f of draws" % x for x in o["stereo"])
6409
+ if o["stereo"] else "")) for o in hyp])
6410
  print("recorded")
6411
 
6412
 
setitools/transits.py CHANGED
@@ -5089,7 +5089,96 @@ def daylines_main(record=False, sigma=5.0, frac=0.1, wide_um=0.05, min_bins=5, e
5089
  print("recorded")
5090
 
5091
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5092
  APPROACHES = {
 
5093
  "daylines": (lambda: core.run_cli(daylines_main), daylines_DOC),
5094
  "polar": (lambda: core.run_cli(polar_main), polar_DOC),
5095
  "translines": (lambda: core.run_cli(translines_main), translines_DOC),
 
5089
  print("recorded")
5090
 
5091
 
5092
+ ttvzip_DOC = r"""Transit-timing residuals that compress: Kepler transit times of Holczer et al. (2016) for every KOI with thirty or more clean times, a line and the two strongest sinusoids removed, the residual divided by its errors, cut into four quantile symbols in transit order and compressed with zlib, against the same symbols shuffled and against first-order autoregressive surrogates at the residual's own lag-one correlation; a sequence below both nulls at the smallest p the draws allow carries structure beyond a line, two periods and red noise, and a published TTV system or an expected count of such sequences explains it.
5093
+
5094
+ python -I seti.py transits ttvzip [record] [--min-n 30] [--draws 300] [--seed 31]"""
5095
+
5096
+
5097
+ def ttvzip_main(record=False, min_n=30, draws=300, seed=31):
5098
+ import zlib
5099
+ from astropy.timeseries import LombScargle
5100
+
5101
+ def fit(A, y, w):
5102
+ p = np.linalg.lstsq(A * np.sqrt(w)[:, None], y * np.sqrt(w), rcond=None)[0]
5103
+ return y - A @ p
5104
+
5105
+ def strip(x, y, w):
5106
+ cols, periods = [np.ones_like(x), x], []
5107
+ r = fit(np.vstack(cols).T, y, w)
5108
+ for _ in range(2):
5109
+ fr, pw = LombScargle(x, r, 1 / np.sqrt(w)).autopower(minimum_frequency=1 / (2 * np.ptp(x) + 1), maximum_frequency=0.5, samples_per_peak=5)
5110
+ f = float(fr[int(np.argmax(pw))])
5111
+ periods.append(1 / f)
5112
+ cols += [np.sin(2 * np.pi * f * x), np.cos(2 * np.pi * f * x)]
5113
+ r = fit(np.vstack(cols).T, y, w)
5114
+ return r, periods
5115
+
5116
+ def code(z):
5117
+ q = np.quantile(z, [0.25, 0.5, 0.75])
5118
+ return len(zlib.compress(bytes(np.searchsorted(q, z).astype(np.uint8) + 65), 9))
5119
+
5120
+ cats = core.vizier("J/ApJS/225/9")
5121
+ t2 = {str(r["KOI"]): r for r in cats[0]}
5122
+ by = {}
5123
+ for r in cats[1]:
5124
+ if any(str(r[c]).strip() not in ("", "--", "0", "None", "nan") for c in ("f_O-C", "Out", "Over")):
5125
+ continue
5126
+ oc, e = num(r["O-C"]), num(r["e_O-C"])
5127
+ if oc is not None and e and np.isfinite(oc) and np.isfinite(e) and e > 0:
5128
+ by.setdefault(str(r["KOI"]), []).append((int(r["N"]), oc, e))
5129
+ rng = np.random.default_rng(seed)
5130
+ res = []
5131
+ for koi, rows in by.items():
5132
+ if len(rows) < min_n:
5133
+ continue
5134
+ a = np.array(sorted(rows))
5135
+ r, periods = strip(a[:, 0], a[:, 1], 1 / a[:, 2] ** 2)
5136
+ z = r / a[:, 2]
5137
+ obs = code(z)
5138
+ sh = np.array([code(rng.permutation(z)) for _ in range(draws)])
5139
+ rho = min(max(float(np.corrcoef(z[:-1], z[1:])[0, 1]), 0.0), 0.95)
5140
+ ar = []
5141
+ for _ in range(draws):
5142
+ u = np.empty(len(z))
5143
+ u[0] = rng.normal()
5144
+ for i in range(1, len(z)):
5145
+ u[i] = rho * u[i - 1] + rng.normal() * math.sqrt(1 - rho ** 2)
5146
+ ar.append(code(u))
5147
+ res.append(dict(koi=koi, kic=str(t2[koi]["KIC"]) if koi in t2 else "", n=len(z), obs=obs, sh=float(sh.mean()), rho=rho, periods=periods,
5148
+ p_sh=float((1 + np.sum(sh <= obs)) / (draws + 1)), p_ar=float((1 + np.sum(np.array(ar) <= obs)) / (draws + 1)),
5149
+ chi2=float(np.sum(z ** 2) / max(len(z) - 6, 1))))
5150
+ floor = 1 / (draws + 1)
5151
+ both = [r for r in res if r["p_sh"] <= floor and r["p_ar"] <= floor]
5152
+ expected = len(res) * floor ** 2
5153
+ # residual structure a published TTV system explains: reduced chi2 well above one after the two sinusoids
5154
+ for r in res:
5155
+ r["vet"] = "timing-variation" if r in both and r["chi2"] > 3.0 else None
5156
+ rest = [r for r in both if r["vet"] is None]
5157
+ # the rest are the chance count when the Poisson tail at the expected number is not small
5158
+ p_rest = 1.0 - sum(math.exp(-expected) * expected ** i / math.factorial(i) for i in range(len(rest)))
5159
+ for r in rest:
5160
+ r["vet"] = "chance-rate" if p_rest > 0.01 else None
5161
+ frac = float(np.mean([r["p_sh"] < 0.01 for r in res])) if res else 0.0
5162
+ print("%d KOIs with %d or more clean transit times; below p %.4f on both nulls: %d (about %.2f by chance); p_sh below 0.01 in %.3f of them" % (
5163
+ len(res), min_n, floor, len(both), expected, frac))
5164
+ for r in both:
5165
+ print(" KOI %s (KIC %s) n %d: %d bytes against %.1f shuffled, lag-1 %.2f, periods %.1f and %.1f transits removed, reduced chi2 %.2f; %s" % (
5166
+ r["koi"], r["kic"], r["n"], r["obs"], r["sh"], r["rho"], r["periods"][0], r["periods"][1], r["chi2"], r["vet"] or "unexplained"))
5167
+ if record:
5168
+ core.record_run(
5169
+ "kepler_ttv_compressibility", "Transit-timing residuals that compress", "Holczer et al. (2016) Kepler transit times (VizieR J/ApJS/225/9)",
5170
+ "%d KOIs with %d or more clean transit times" % (len(res), min_n), os.path.abspath(__file__), "ttvzip", len(res), "KOIs",
5171
+ dict(min_n=min_n, draws=draws, seed=seed), dict(below_both=len(both), expected=expected, frac_p_sh_001=frac),
5172
+ "zlib length of four quantile symbols below every shuffle and every AR(1) surrogate (p %.4f)" % floor,
5173
+ "%d below both nulls at p %.4f against %.2f by chance; %.1f%% below 0.01 against shuffles alone; %d unexplained" % (
5174
+ len(both), floor, expected, 100 * frac, sum(r["vet"] is None for r in both)),
5175
+ [dict(target="koi:%s" % r["koi"], stat=r["obs"], p=max(r["p_sh"], r["p_ar"]), unit="zlib bytes of the quantile symbols", vet=r["vet"],
5176
+ note="KIC %s; %d times; %.1f shuffled; lag-1 %.2f; reduced chi2 %.2f" % (r["kic"], r["n"], r["sh"], r["rho"], r["chi2"])) for r in both])
5177
+ print("recorded")
5178
+
5179
+
5180
  APPROACHES = {
5181
+ "ttvzip": (lambda: core.run_cli(ttvzip_main), ttvzip_DOC),
5182
  "daylines": (lambda: core.run_cli(daylines_main), daylines_DOC),
5183
  "polar": (lambda: core.run_cli(polar_main), polar_DOC),
5184
  "translines": (lambda: core.run_cli(translines_main), translines_DOC),