boguesuser
Active Member
My last two braincells finally bumped into eachother and I realized how to do this. I can just steal someone else's working code.
Its done but its pretty slow so I'll post the results tomorrow.
I remember why I switched to Rust lmao.
More importantly
I could be wrong but weren't they pulling the transients from only the POSS-1?
Its done but its pretty slow so I'll post the results tomorrow.
I remember why I switched to Rust lmao.
View attachment 83183
From the 5399 sources. I get 39 In Shadow according to this code.
Python:import csv import os import glob from astropy.io import fits from astropy.time import Time from earthshadow import get_shadow_center, get_shadow_radius, dist_from_shadow_center from astropy.coordinates import Angle import astropy.units as u from astropy.coordinates import SkyCoord import matplotlib.pyplot as plt import numpy as np def fits_time( date_obs, ut ) : date_split = date_obs.split( "/" ) return f"19{date_split[2]}-{date_split[1]}-{date_split[0]}T{ut}" def in_shadow( ra_value, dec_value, time ) : center = get_shadow_center( time, obs='Palomar', orbit='GEO') radius = get_shadow_radius(orbit='GEO') dist = dist_from_shadow_center( ra_value, dec_value, time=time, obs='Palomar', orbit='GEO') return dist < radius - 2*u.deg def get_metadata(): output_csv_file = "extracted_data.csv" metadata_list = [] fits_files = glob.glob('fits_files/*.fits') for fits_file in fits_files: with fits.open(fits_file) as hdul: header = hdul[0].header c = SkyCoord( header["OBJCTRA"], header["OBJCTDEC"], unit=(u.hourangle, u.deg), frame='icrs') ra_deg = c.ra.degree dec_deg = c.dec.degree metadata = { "file_name" : os.path.basename(fits_file), "DATE-OBS" : header["DATE-OBS"], "UT" : header["UT"], "SITELAT" : header["SITELAT"], "SITELONG" : header["SITELONG"], "OBJCTRA" : header["OBJCTRA"], "OBJCTDEC" : header["OBJCTDEC"], "EQUINOX" : header["EQUINOX"], "EPOCH" : header["EPOCH"], "EXPOSURE" : header["EXPOSURE"], "SHADOW" : in_shadow( ra_deg, dec_deg, time=Time( fits_time( header["DATE-OBS"], header["UT"] ), format='fits') )[0] } metadata_list.append( metadata ) with open(output_csv_file, 'w', newline='') as csvfile: fieldnames = list(metadata_list[0].keys()) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(metadata_list) if __name__ == "__main__": get_metadata()
I am not sure how to figure out how many are expected to be accounting for location bias in the POSSI data, and fraction of the sky in the shadow etc.
More importantly
106339 detected transients right? There are about 870 red plates. If spread evenly across all red plate exposures, thats 122 per plate or 2.4 per minute. These were either happening in bursts or no managed one noticed the sky constantly flashing.It's not incredibly small relative to LEO in terms of area. It's small as a percentage of the total area of the sphere at that distance.
This graph should show how the area shrinks in absolute terms (orange dashed) vs. relative to hemisphere area (blue). It's ChatGPT, but seems correct.
View attachment 83186
At GEO it's 1% of the hemisphere, 0.5% of the total sky.
or 0.7%, so a surplus rather than a defict.
But they say:
1223/106339 is 1.15%External Quote:
To independently verify the number of transients located within Earth's shadow, we implemented a custom code
(using ChatGPT-assisted scripting) that follows a similar principles to EarthShadow. After validating its performance
on a subset of candidates from Villarroel et al. (2025), we applied it to the full sample. The resulting counts — 374
transients at 42,164 km and 57 at 80,000 km — are in good agreement with the results obtained using EarthShadow,
supporting the robustness of our shadow deficit measurement.
To estimate the statistical significance of the difference in transient detection rates within Earth's umbra at different421
altitudes, we compute Poisson uncertainties for the observed and expected fractions. At 42,164 km altitude, we expect
N = 1223 transients in shadow out of 106,339 total, corresponding to an expected fraction of fexp = 0.0115 ±0.00033.
However, we observe only N = 349 transients in shadow, yielding fobs = 0.00328 ±0.00018. The difference between
these fractions is highly significant, with a significance level of 21.9σ, computed by combining the Poisson uncertainties
349/106339 is 0.33%
Oh, they use geocentric radius (a sphere defined by the radius from the center of the earth), not altitude (a sphere defined by it's altitude above a nominally spherical Earth). So 42,164 is GEO.
I could be wrong but weren't they pulling the transients from only the POSS-1?