photometry op• Data kinds: image2d × keypoints → table
• Call: import fullseye as fs; fs.ledger.psf_fit(image, centers, model='gaussian', box=11, max_iter=200) (implementation को सीधे call करना हो तो import astrostack; astrostack.psf_fit(image, centers, model='gaussian', box=11, max_iter=200), registry से लेना हो तो opsastrostack.get("psf_fit"))
तारे की image पर PSF fit करके केंद्र और FWHM निकालता है।
*model* "gaussian" एक elliptical Gaussian का 6-parameter fit है bkg + amp * exp(-((dr/sr)^2 + (dc/sc)^2)/2), और roundness (roundness = min(sr,sc)/max(sr,sc)) by-product के रूप में मिलती है —— tracking error या हवा से खिंची हुई star images यहाँ दिख जाती हैं। "moffat" circularly symmetric bkg + amp * (1 + r^2/alpha^2)^(-beta) (Moffat 1969) है, जिसमें beta भी एक free parameter है। Least squares scipy.optimize.least_squares है (Trust Region Reflective), जिसके deterministic initial values 2nd moments से बनाए जाते हैं —— कोई random number इस्तेमाल नहीं होता, इसलिए समान इनपुट पर समान उत्तर मिलता है।
FWHM, fit किए गए parameters से एक closed form है:
Gaussian के लिए 2 sqrt(2 ln 2) * sqrt(sr*sc) (geometric mean), Moffat के लिए 2 alpha sqrt(2^(1/beta) - 1)।
यह हमेशा pixel box जितना चौड़ा निकलता है। यहाँ जो fit होता है वह एक *continuous* Gaussian है, लेकिन image का हर pixel continuous distribution का 1-pixel box पर integral होता है। चौड़ाई 1 वाले uniform box का variance 1/12 है, इसलिए लौटाया गया sigma असली sigma नहीं बल्कि sqrt(sigma^2 + 1/12) है —— यह estimation error नहीं है; image ही ऐसी बनी होती है। Measurements इस prediction से अच्छी तरह मेल खाते हैं::
true FWHM predicted = 2.3548*sqrt(sigma^2+1/12) measured (median)
2.5 2.5908 2.5930
3.5 3.5654 3.5625
5.0 5.0460 5.0145
अगर असली sigma चाहिए तो इसे sqrt(sigma_fit^2 - 1/12) के रूप में घटाएँ, लेकिन default में यह घटाया नहीं जाता —— stellar measurement में आम तौर पर बताया जाने वाला "FWHM" image पर दिखने वाली चौड़ाई है, और चुपचाप correction जोड़ने से यह दूसरे tools के मानों से मेल नहीं खाएगा।
हर star के लिए एक dict की list लौटाता है (table vocabulary)। Keys हैं row / col (fit किया गया centre), fwhm_px, amplitude, background, roundness, rms (residual RMS), converged (bool), model, और model पर निर्भर sigma_row_px / sigma_col_px या alpha_px / beta। जिन stars की window image से बाहर निकलती है और जिनका fit converge नहीं हुआ, वे भी converged=False के साथ लौटाए जाते हैं, हटाए नहीं जाते —— उन्हें चुपचाप हटाने से किसी को पता नहीं चलेगा कि "stars गायब हो गए"।
Raises ValueError: अगर *model* PSF_MODELS में नहीं है / *box* 5 से कम है या सम है / *centers* (N, 2) नहीं है।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• astro_stacking — py -3.11 examples/astro_stacking.py
• poc_star_astrometry — py -3.11 examples/poc_star_astrometry.py
table को input के रूप में लेते हैं)—
photometry)star_detect · aperture_photometry
*Provenance: astrostack.py — ASTROSTACK operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.