Göz kırp, farkını al, üst üste koy
Kareler sırayla oynar; fark modunda yeni konum turuncu, eski konum mavi; toplamda hareket renkli bir iz bırakır.
SPHEREx · 102 renkte kızılötesi · 1953'ten bugüne
Blink Karşılaştırıcı, aynı gökyüzü noktasının 1953'ten bugüne çekilmiş fotoğraflarını ve SPHEREx teleskobunun 102 renkli kızılötesi karelerini üst üste oynatır. Sabit yıldızlar yerinde durur, yakın ve hızlı bir yıldız zıplar. Sistem hareketi kendisi ölçer, Gaia ile sınar ve cismin spektrumundan neyden yapıldığını çıkarır.
Barnard Yıldızı · yılda 10,4″ kuzeye
Ne yapar
Blink karşılaştırıcısı farklı gecelerde çekilmiş iki fotoğraf plağını hızla değiştirerek gösteren bir alettir; Plüton 1930'da böyle bulundu. Bu proje aynı fikri tarayıcıya taşır ve 70 yılı aşan arşivi NASA'nın 2025'te gözleme başlayan SPHEREx teleskobuyla birleştirir. Kurulum gerekmez: ön yüz tek bir HTML dosyası, arka uç tek bir Cloudflare Worker.
Kareler sırayla oynar; fark modunda yeni konum turuncu, eski konum mavi; toplamda hareket renkli bir iz bırakır.
Solda eski fotoğraf, sağda bugünkü SPHEREx karesi. Ayırıcıyı sürükledikçe yıldızın kayması gözle görülür.
Alandaki her yıldız SPHEREx karelerinde izlenir; hareket eden bulunur ve Gaia DR3 ile otomatik sınanır.
Hedefin her karedeki yeri bulunup hızı katalogla karşılaştırılır; 2050'de nerede olacağı ve dolunay çapı kadar yolu kaç yılda aldığı hesaplanır.
Görüntüye tıklanan noktanın akısı her SPHEREx görüntüsünde ayrı ölçülür: spektrum, ışık eğrisi ve periyot çıkar.
Spektrum türü bilinen 65 yıldız ve cüceden kurulan şablonlarla karşılaştırılır; su, metan ve CO bantlarının derinliği ölçülür.
Her SPHEREx karesinde, çekim anında alanda olan bilinen asteroit ve kuyruklu yıldızlar IMCCE SkyBoT'tan alınıp çizilir.
CatWISE'ta hızlı görünen kaynaklar Gaia DR3 ve SIMBAD ile karşılaştırılır; kalanlar SPHEREx'le sınanır.
IRSA'ya yüklenen en yeni planlama periyodu, dosya ve pozlama; arşiv 30 dakikada bir kendiliğinden taranır.
Ayrıca: NEOSSat ve CADC görüntüleri, Aladin Lite gökyüzü atlası, GIF ve PNG indirme, paylaşılabilir bağlantı, kendi kendine oynayan 1 dakikalık tur, Kolay/Uzman modu, Türkçe/İngilizce, açık/koyu tema.
14 Kasım 2026 sürümü
55 benzer projeyle yapılan kıyaslamada eksik çıkan her şey eklendi; en büyük zayıflık olan yavaşlığın asıl sebebi bulunup giderildi.
dr1 klasörleri ve l2b_retry dosyaları tanınıyor; spektrumda 240/240 ölçüm.Nasıl çalışır
Arşivlerin çoğu tarayıcıdan doğrudan okunmaya izin vermez (CORS). Worker bu yüzden ince bir ara katman: isteği doğrular, arşivden yalnız gereken baytları alır, sonucu önbelleğe koyar. Görüntü işleme, hizalama, yığma, tarama ve spektrum tarayıcıda yapılır.
/api/spherex/ara görüntü listesi/api/spherex/kesit S3'ten kesit/api/spherex/foto fotometri/api/katalog, /api/kesif Gaia, CatWISE/api/skybot, /api/canli, /api/cadcOtomatik tarama
Bütün SPHEREx kareleri aynı ızgarada. Tarama yalnız SPHEREx karelerini kullanır, çünkü farklı teleskopların farklı renkleri sahte "hareket" üretir. Yaklaşık 0,3 saniye sürer.
| Alan | Taramanın bulduğu (yalnız SPHEREx) | Katalog | Gaia DR3 sınaması |
|---|---|---|---|
| Barnard Yıldızı | 10,4 ± 0,8″/yıl, 357° | 10,39″/yıl, 356° | doğruluyor |
| Barnard alanı, ikinci aday | 5,1 ± 1,2″/yıl, 210° | — | hareketsiz: yanlış alarm olarak işaretlendi |
| Kapteyn Yıldızı | 8,8 ± 0,7″/yıl, 127° | 8,67″/yıl, 131° | katalogla uyumlu |
| 61 Cygni A | 4,1 ± 0,9″/yıl, 58° | 5,28″/yıl, 52° | doğruluyor (5,3″/yıl) |
| 61 Cygni B | 4,0 ± 0,6″/yıl, 61° | tarama kendi buldu | doğruluyor (5,2″/yıl) |
| Vega (kontrol) | hareket bulunmadı | 0,35″/yıl | beklenen: SPHEREx'in ayırabileceğinden yavaş |
Yalnız tek dönemde görünen kaynaklar listelenmez: bir dönemin görüntüleri günlere yayıldığı için gerçek bir asteroit toplamda keskin bir nokta bırakamaz. Bunlar çoğunlukla SPHEREx'in hayalet görüntüleri; yalnız bilinen bir asteroitle eşleşenler gösterilir. Bulunan her şey "aday"dır, doğrulanmış keşif değildir.
Doğrulama
Her yöntem önce sonucu bilinen cisimlerde denendi.
Ana kodlar
Aşağıdaki parçalar yayındaki dosyalardan otomatik alınır, kısaltılmamıştır.
Her sorguda IRSA'nın SIA servisinden o noktayı kapsayan bütün SPHEREx görüntüleri alınır; haftalık yeni veriler kendiliğinden gelir. Yanıt ~330 KB'lık bir CSV. Eskiden karakter karakter ayrıştırılıyordu ve Cloudflare'in işlem süresi sınırını aşıyordu (hata 1102); şimdi satır satır bölünüyor: 25,7 ms → 2,4 ms, sonuç birebir aynı.
async function search(u) {
const ra = num(u.searchParams.get("ra"), 0, 360), dec = num(u.searchParams.get("dec"), -90, 90);
const q = new URLSearchParams({ FACILITY: "SPHEREx", POS: `circle ${ra} ${dec} 0.002`, RESPONSEFORMAT: "CSV" });
const r = await fetch(`${IRSA}/SIA?${q}`);
if (!r.ok) throw new Error("IRSA SIA " + r.status);
// Hızlı ayrıştırma: gereken sütunların hepsi, tırnaklı JSON içeren cloud_access sütunundan önce ve virgülsüz.
// (Karakter karakter ayrıştırma ~330 KB'lık yanıtta Worker'ın CPU sınırını aşıp 1102 hatası veriyordu.)
const rows = (await r.text()).split("\n").filter(l => l.length > 1).map(l => l.split(","));
const h = rows.shift() || [], c = k => h.indexOf(k);
const out = rows.filter(r => r[c("dataproduct_subtype")] === "science" && /\/level2\//.test(r[c("access_url")] || "")).map(r => ({
url: r[c("access_url")],
det: +r[c("energy_bandpassname")].replace(/\D/g, ""),
wmin: +(+r[c("em_min")] * 1e6).toFixed(3), wmax: +(+r[c("em_max")] * 1e6).toFixed(3),
mjd: (+r[c("t_min")] + +r[c("t_max")]) / 2,
obs: r[c("obs_id")], coll: r[c("obs_collection")],
...detPos(r[c("s_region")], ra, dec),
})).sort((a, b) => a.mjd - b.mjd);
return json({ ra, dec, n: out.length, guncel: new Date().toISOString(), goruntuler: out });
}
Bir SPHEREx görüntüsü ~70 MB. Worker, NASA'nın herkese açık S3 deposundan HTTP Range ile yalnız başlığı ve hedefin çevresindeki satırları okur; sıkıştırılmış bayrak katmanını (RICE) kendisi çözer. Olmazsa IRSA'nın kesit servisine döner.
// SPHEREx kesitini IRSA'nın kesit servisi yerine doğrudan herkese açık S3 deposundan (nasa-irsa-spherex) üretir.
// Yalnız gereken satırlar HTTP Range ile okunur; sıkıştırılmış FLAGS katmanı (RICE_1) burada çözülür.
// Çıktı, IRSA kesitiyle aynı biçimde: IMAGE, FLAGS, VARIANCE, ZODI katmanları, kesite göre kaydırılmış WCS ile.
// Herhangi bir sorunda hata fırlatır; çağıran taraf IRSA'ya geri döner.
async function aralik(url, a, b) {
const r = await fetch(url, { headers: { Range: `bytes=${a}-${b}` } });
if (r.status !== 206 && r.status !== 200) throw new Error("S3 " + r.status);
return new Uint8Array(await r.arrayBuffer());
}
Her yıldızın her SPHEREx karesindeki ağırlık merkezi bulunur ve zamana göre ağırlıklı bir doğru uydurulur. Pencere yıldızın parlaklık yarıçapına göre büyür: doymuş parlak bir yıldızın çekirdeği düz olduğundan küçük pencere hareketi göremez.
function yildizIzle(G,Z,q,sc,T){ // sc: yay saniyesi / piksel; dönüş piksel/yıl
const psf=Math.max(2,6.2/sc), Rw=Math.min(18,Math.max(Math.ceil(psf)+2,Math.ceil(q.r+psf+2))), P=[];
G.forEach((f,k)=>{ const c=izMerkez(Z[k],q.x,q.y,Rw,T); if(c&&Math.hypot(c[0]-q.x,c[1]-q.y)<Rw) P.push({t:f.s.epoch,x:c[0],y:c[1],w:Math.min(c[2],50)}); }); // ağırlık: tepe değeri (S/G), doymuşta 50
if(P.length<Math.max(3,Math.ceil(0.7*G.length))) return null;
const W=P.reduce((a,o)=>a+o.w,0), tm=P.reduce((a,o)=>a+o.w*o.t,0)/W, Stt=P.reduce((a,o)=>a+o.w*(o.t-tm)**2,0); if(Stt<=0) return null;
const egim=k=>{ const m=P.reduce((a,o)=>a+o.w*o[k],0)/W; return [P.reduce((a,o)=>a+o.w*(o.t-tm)*(o[k]-m),0)/Stt, m]; };
const [vx,ox]=egim("x"), [vy,oy]=egim("y");
const chi=P.reduce((a,o)=>a+o.w*((o.x-ox-vx*(o.t-tm))**2+(o.y-oy-vy*(o.t-tm))**2),0)/Math.max(1,2*(P.length-2));
return {vx,vy,ox,oy,tm, hata:Math.sqrt(Math.max(chi,0.02*W/P.length)/Stt), vv:Math.hypot(vx,vy), nk:P.length, Rw};
}
Girişteki tüm gökyüzü haritası Galaktik koordinatlarda 2:1 Mollweide. Seçilen yıldızın yeri aynı formülle altın halkayla işaretlenir; 2θ + sin 2θ = π sin b denklemi Newton yöntemiyle çözülür.
function mollXY(l,b){ // l,b radyan → birim elips içinde (x: -1..1, y: -1..1)
l=((l+Math.PI)%(2*Math.PI)+2*Math.PI)%(2*Math.PI)-Math.PI;
let t=b; if(Math.abs(Math.abs(b)-Math.PI/2)<1e-9) t=b; else for(let i=0;i<30;i++){ const d=(2*t+Math.sin(2*t)-Math.PI*Math.sin(b))/(2+2*Math.cos(2*t)); t-=d; if(Math.abs(d)<1e-9) break; }
return [-l*Math.cos(t)/Math.PI, Math.sin(t)]; }
function
Hız ve güvenilirlik
Kesitler 30 gün, görüntü listesi 1 saat, canlı arşiv 30 dakika önbellekte. Worker yalnız belirli arşiv adreslerine gider; kullanıcıdan gelen adres ve sayılar denetlenir. Hesap yoktur, kişisel veri toplanmaz.
Sınırlar
Sonuçları doğru okumak için bilmen gerekenler.