Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
afe6d50
One big edit.
mfitzasp Mar 11, 2026
d69e328
quality edits from kalee
mfitzasp Mar 11, 2026
65025fe
remove dead and loud imports
mfitzasp Mar 11, 2026
f7d2ca1
filter tweaks
mfitzasp Mar 14, 2026
705e2ea
Too big a commit because I forgot to push it.
mfitzasp Mar 20, 2026
5ba9742
Handle NextAstroPlateSolution JSON
mfitzasp Mar 28, 2026
3ca2240
Add NextAstro 502 messaging
mfitzasp Mar 28, 2026
b87dd77
Add adaptive aperture scaling based on per-frame PSF width
mfitzasp Mar 29, 2026
136bb10
Prefer existing header WCS over external plate solving
mfitzasp Mar 29, 2026
a0d5582
Report adaptive aperture statistics and add diagnostics
mfitzasp Mar 30, 2026
2942a4f
Handle WCS headers from image extensions
mfitzasp Mar 30, 2026
54913e3
Fix up some wcs bugs.
mfitzasp Mar 30, 2026
a5a880c
Fix adaptive aperture sigma scaling and clip radius outliers
mfitzasp Mar 30, 2026
039dc03
Report WCS source using only the filename
mfitzasp Mar 30, 2026
c090daf
Add impact parameter fit option and centered geometry triangle plot
mfitzasp Apr 11, 2026
6260684
Center airmass fits and tighten triangle plot layout
mfitzasp Apr 11, 2026
fd06ef8
Remove aperture labels from PSF FOV legend
mfitzasp Apr 11, 2026
10cdd6f
Fix transit phase plots to use the full dataset span
mfitzasp Apr 12, 2026
a335391
Unify photometry fallback search and log fit failure reasons
mfitzasp Apr 12, 2026
974a0a0
filter ID and plate solution reporting.
mfitzasp Apr 17, 2026
4da6f10
Improve comparison-star rejection diagnostics and final fit retries
mfitzasp Apr 19, 2026
3366347
Harden NextAstro requests and Rp/R* posterior retries
mfitzasp Apr 19, 2026
7c5867a
Improve pointing prechecks and enable EEBLS by default
mfitzasp Apr 25, 2026
d4d8a6c
Improve aperture photometry with FWHM-aware sky annulus
mfitzasp Apr 26, 2026
51da382
Iterate comparison-star outlier rejection before target-fit ranking
mfitzasp Apr 27, 2026
cee1633
Widen initial Rp/R* bounds for transit fitting
mfitzasp Apr 27, 2026
4f8a834
Add a/Rs and impact parameter retries and reporting
mfitzasp Apr 28, 2026
b604699
human readable bits in QC
mfitzasp Apr 28, 2026
6a95548
Preserve expanded bounds through baseline refits
mfitzasp Apr 29, 2026
65b6e8d
doing real good.
mfitzasp Apr 29, 2026
5d4bb6b
Expand AAVSO exports with richer diagnostics
mfitzasp Apr 29, 2026
ee374bf
Add KTMF decision metadata to photometry outputs
mfitzasp Apr 30, 2026
5fff787
Cache and multiprocess pointing precheck alignment
mfitzasp Apr 30, 2026
8a2fdaf
guarding aginst evil colons amongst other things.
mfitzasp May 7, 2026
ce40c40
Update requirements.txt
mfitzasp May 8, 2026
41344bd
triangle plot bug
mfitzasp May 8, 2026
a6db247
better triangle bounds
mfitzasp May 9, 2026
308e693
better fitting
mfitzasp May 10, 2026
f26abaa
actual uncertainty in model around fit.
mfitzasp May 11, 2026
2741284
better fits
mfitzasp May 12, 2026
c40de40
uncertainty on a0/a2
mfitzasp May 12, 2026
5fe0ab9
ultranest in windows working.
mfitzasp May 13, 2026
5c6751b
uncertaintys and junk
mfitzasp May 14, 2026
e959c07
stellar tweaks
mfitzasp May 15, 2026
99060b0
plot update
mfitzasp May 15, 2026
6280664
LDtk backup
mfitzasp May 19, 2026
43910f0
rp/rs bounds
mfitzasp May 20, 2026
6f3f14c
extra LDtk backup server
mfitzasp May 21, 2026
52cfd87
better handling of partials during ultranest search
mfitzasp May 23, 2026
840d883
uncertainties from data, mate, not priors.
mfitzasp May 23, 2026
a51bb8d
Bad pixels default and redundant inits removal
mfitzasp May 23, 2026
a89c400
better outlier rejection
mfitzasp May 25, 2026
84dc216
appropriate decimals for magnitudes.
mfitzasp May 25, 2026
f709bc5
Merge branch 'michael_fitzgeralds_wonderful_branch_of_magic' of https…
mfitzasp May 25, 2026
0278c23
better matching, aperture corrections
mfitzasp May 25, 2026
391387c
report 0.001 rather than 0.000 mag error
mfitzasp May 26, 2026
28c494b
transit depth =/= rp/rs
mfitzasp May 27, 2026
cabac52
remove rp/rs fail threshold
mfitzasp May 27, 2026
25414e4
clearer transit depth (and a bug or two)
mfitzasp May 27, 2026
5a4a14a
ULTRANEXTMEGASPEEDUPS
mfitzasp May 27, 2026
e90bf71
widen sky annulus
mfitzasp May 27, 2026
346071d
better QC for partial transits.
mfitzasp May 28, 2026
4f19037
fixed missing baseline uncertainty and font adjustments
mfitzasp May 31, 2026
8c28d80
don't produce filenames with spaces
mfitzasp Jun 3, 2026
855794b
Move QC up higher. Also a protection for RA in hours.
mfitzasp Jun 6, 2026
a072ccf
fix baseline uncertainty and make pointing checks off by default.
mfitzasp Jun 7, 2026
f631222
Stop AID from picking random unvetted other stars and also uber-infla…
mfitzasp Jun 8, 2026
d08b083
Grab pixel binning from header if not in inits.json
mfitzasp Jun 8, 2026
61c60ff
Fixing up PSF centroiding for Art
mfitzasp Jun 15, 2026
aa50240
Major updates to QC, bounds and proper uncertainties.
mfitzasp Jun 18, 2026
7bf391e
decimal places
mfitzasp Jun 19, 2026
67f98ae
A lot of AAVSO AID related adjustements but also some partial tranit …
mfitzasp Jun 21, 2026
272dc20
Glitch finding in residual QC items
mfitzasp Jun 24, 2026
aed0dc9
seed not dependant on name for unknown planets
mfitzasp Jul 2, 2026
9d9271e
Minor VSP plot upgrade
mfitzasp Jul 4, 2026
5308510
exposure times and exposure error tightening
mfitzasp Jul 7, 2026
918a543
transit smearing and no-comp-flux-scaling
mfitzasp Jul 8, 2026
33bc0be
Fix inverted eccentricity dependence in analytic transit duration (#1…
opusbuilds Jul 9, 2026
8296ec5
ldtk ftp fallback and missing a2 error
mfitzasp Jul 10, 2026
118e3b0
reject targets and comps by saturation.
mfitzasp Jul 13, 2026
cd59555
stellar variability only options.
mfitzasp Jul 13, 2026
d7e4d92
Merge pull request #1384 from opusbuilds/fix/eccentric-transit-durati…
mfitzasp Jul 14, 2026
4b8cd51
Kalee's persistence bears variable fancy fruit
mfitzasp Jul 15, 2026
61cc832
A few small bugs.
mfitzasp Jul 15, 2026
4fdd4b7
Add gaussian Tmid facto to ktmf
mfitzasp Jul 15, 2026
1de7e83
glitches, bugs, changes and speedups from the Gauntlet
mfitzasp Jul 16, 2026
179aa5f
clean up directory structure.
mfitzasp Jul 16, 2026
09ee08a
expand search range for TOI and TIC objects
mfitzasp Jul 16, 2026
cd25005
better exotic bounds for TOI and TIC
mfitzasp Jul 17, 2026
e11f88f
lazy load necessary fits
mfitzasp Jul 17, 2026
7e44622
better photometry endpoint usage
mfitzasp Jul 17, 2026
78f74d4
EXOTIC used 1 instead of 0 pixel origin for WCS
mfitzasp Jul 17, 2026
29e29f0
Shorten directory names and fix wrong filter fallbacks
mfitzasp Jul 17, 2026
6f4a568
save stellarvariability to root.
mfitzasp Jul 18, 2026
d34248d
Add CV to the filter list
mfitzasp Jul 20, 2026
7c76d42
plot title clarity
mfitzasp Jul 22, 2026
b37ab73
ensembel fix
mfitzasp Jul 23, 2026
7dd88b9
4 decimal places
mfitzasp Jul 23, 2026
34973f0
better ensemble options and readme
mfitzasp Jul 27, 2026
3a4986f
Fix epoch selection: report the transit nearest the data, not at-or-b…
opusbuilds Jul 28, 2026
98330b2
Merge pull request #1388 from opusbuilds/fix-epoch-selection-1387
mfitzasp Jul 28, 2026
cb55104
OOT variability working for ensemble now.
mfitzasp Jul 28, 2026
4398bb8
Ultranest efficiency optimization #72
mfitzasp Jul 30, 2026
3123724
Comp RA&Dec and use_only_these_comps commit
mfitzasp Aug 2, 2026
3850f2d
Just some ID when requesting astrometry
mfitzasp Aug 2, 2026
dce494d
RA, Dec in sexigesimal. Stop expanding comps in exact mode.
mfitzasp Aug 2, 2026
5a38aee
differential bug
mfitzasp Aug 3, 2026
edfea3a
restrict to 4 decimal places (again)
mfitzasp Aug 3, 2026
c32814d
| vs , delimiter glitch
mfitzasp Aug 4, 2026
f47819a
Collate AAVSO Files together
mfitzasp Aug 4, 2026
ccef030
ensemble finders + AAVSO collation
mfitzasp Aug 4, 2026
abe35d5
fallback/retry VSP rather than crash. No unnecessary align when WCS.
mfitzasp Aug 9, 2026
d295d8c
Interpret N,S,E,W in long/lat headers
mfitzasp Aug 9, 2026
9b90ebf
Calob logging bug
mfitzasp Aug 11, 2026
1d39deb
colab error suppression
mfitzasp Aug 12, 2026
fbad14a
Single WCS =/= all images have WCS bug.
mfitzasp Aug 12, 2026
fd0eb7b
Tightening up "ensemble" language
mfitzasp Aug 13, 2026
9100cd3
Clearing up sig. figs and coefficient reporting
mfitzasp Aug 13, 2026
fcd35c8
Making sure raw photometry is captured.
mfitzasp Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,4 @@ eaConf.json
exotic.log.*
pl_names.json
/.project
/.deps313
64 changes: 62 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ Get EXOTIC up and running faster with a json file. Please see the included file

"AAVSO Observer Code (blank if none)": "RTZ",
"Secondary Observer Codes (blank if none)": "",
"Observatory Full Title": "",

"Observation date": "17-December-2017",
"Obs. Latitude": "+32.41638889",
Expand All @@ -120,10 +121,11 @@ Get EXOTIC up and running faster with a json file. Please see the included file
"Filter Name (aavso.org/filters)": "V",
"Observing Notes": "Weather, seeing was nice.",

"Plate Solution? (y/n)": "y",
"Plate Solution? (y/n)": true,

"Target Star X & Y Pixel": [424, 286],
"Comparison Star(s) X & Y Pixel": [[465, 183], [512, 263], [], [], [], [], [], [], [], []]
"Comparison Star(s) X & Y Pixel": [[465, 183], [512, 263], [], [], [], [], [], [], [], []],
"Comparison Star(s) RA & Dec": null
},
"planetary_parameters": {
"Target Star RA": "02:04:10",
Expand Down Expand Up @@ -159,13 +161,71 @@ Get EXOTIC up and running faster with a json file. Please see the included file
"Filter Minimum Wavelength (nm)": null,
"Filter Maximum Wavelength (nm)": null,

"Fast Aperture Mask (y/n)": false,
"allow_pixel_alignment_fallback": true,
"prefer_pixel_values_over_wcs_for_target": false,
"use_psf_photometry": true,
"use_aperture_photometry": true,
"use_aperture_corrections_and_full_image_fwhm": false,
"use_ensemble_photometry_rather_than_single_comp": false,
"stellar_variability_only": false,
"use_ensemble_photometry_for_stellar_variability": true,
"require_apparent_magnitudes": true,
"use_exactly_the_comps_provided": false,
"maximum_number_of_ensemble_comparisons_for_transit": 5,
"maximum_number_of_ensemble_comparisons_for_stellar_variability": 5,
"photometer_fortuitous_variables": true,
"use_single_comparison_for_fortuitous_variables": true,
"use_nextastro_vsx_cache_first": false,
"skip_low_comparison_coverage_rejection": false,
"fit_lightcurve_to_every_comparison_candidate": false,
"detrend_on_outoftransit_baseline": true,
"final_fit_baseline_duration_multiplier": 1.0,
"use_eebls_to_initialize_tmid_and_bounds": true,
"pick_comparison_by_eebls_snr": true,
"use_impactparameter_rather_than_inclination_to_fit": true,
"Use target-driven comp selection rather than comp-driven comp selection": false,
"require_comp_star": true,

"Pixel Scale (Ex: 5.21 arcsecs/pixel)": null,

"Exposure Time (s)": 60.0
}
}
```

### Comparison-star mode tags

Put these tags in the top-level `"optional_info"` object. JSON booleans (`true` and `false`) are recommended. Every initialization boolean also accepts numeric `1`/`0` and case-insensitive strings `"y"`/`"n"`, `"yes"`/`"no"`, `"true"`/`"false"`, and `"on"`/`"off"`.

Raw-image reductions prefer per-frame WCS when WCS coverage is consistent across the dataset. With the default `"allow_pixel_alignment_fallback": true`, EXOTIC uses `"bad_wcs_threshold_percent"` to choose the safe path: sparse missing-WCS frames below the threshold are dropped and the retained sequence remains WCS-based; when the missing-WCS fraction reaches or exceeds the threshold, all frames are retained and legacy pixel alignment is available for frames without usable WCS. Set `"allow_pixel_alignment_fallback": false` to require WCS-only processing and drop every frame without celestial WCS. The existing `"Ignore WCS in Header and Do Manual Alignment? (y/n)": "y"` option explicitly enables pixel alignment for the entire run.

Comparison stars may be supplied in `user_info` using either `"Comparison Star(s) X & Y Pixel"` or `"Comparison Star(s) RA & Dec"`. Do not populate both. RA/Dec values may be decimal degrees, such as `[[31.04125, 46.68972]]`, or sexagesimal strings, such as `[["02:04:09.90", "+46:41:23.0"]]`. Sexagesimal values must be quoted because they are JSON strings; forms such as `[[02:04:09.90, +46:41:23.0]]` are not valid JSON. Supplied X/Y positions are converted to sky coordinates with the reference frame's WCS; during photometry those sky coordinates are projected independently through every retained frame's own WCS header.

| Reduction | Requested comparison mode | `optional_info` settings |
|---|---|---|
| Transit fit | Single comparison star (default) | `"stellar_variability_only": false`, `"require_comp_star": true`, `"use_ensemble_photometry_rather_than_single_comp": false` |
| Transit fit | Comparison-star ensemble | `"stellar_variability_only": false`, `"require_comp_star": true`, `"use_ensemble_photometry_rather_than_single_comp": true`, `"maximum_number_of_ensemble_comparisons_for_transit": 5` |
| Transit or variability run | Exactly the supplied comparison(s) | `"use_exactly_the_comps_provided": true`. Comparisons may be supplied as X/Y or RA/Dec. One supplied comparison is used alone; two or more are all used as one fixed ensemble. Automatic replacement, addition, VSX/stability vetting, ranking, and ensemble-size limiting are bypassed. |
| Transit fit | No comparison star | There is no tag that forces this mode. `"require_comp_star": false` only removes the requirement for a comparison star; it does not force target-only photometry. The current comparison-calibration FITS path still selects a single comparison or an ensemble. |
| Stellar-variability-only run | Single comparison star | `"stellar_variability_only": true`, `"use_ensemble_photometry_for_stellar_variability": false` |
| Stellar-variability-only run | Calibrated comparison-star ensemble (default) | `"stellar_variability_only": true`, `"use_ensemble_photometry_for_stellar_variability": true`, `"maximum_number_of_ensemble_comparisons_for_stellar_variability": 5` |
| Stellar-variability-only run | No comparison star | Not supported for raw-FITS absolute variability photometry; a single calibrated comparison or calibrated ensemble is required. A pre-reduced relative light curve can be supplied without raw comparison-star photometry, but it is not selected by a comparison-mode tag. |

The two ensemble limits are independent. `"maximum_number_of_ensemble_comparisons_for_transit"` caps only the transit-fit ensemble. `"maximum_number_of_ensemble_comparisons_for_stellar_variability"` caps both stellar-variability-only and fortuitous-variable ensembles. Each defaults to `5`, must be an integer of at least `2`, and has no configured upper limit. Increase either value to permit a much larger ensemble; EXOTIC will enlarge automatic candidate discovery for the corresponding ensemble where applicable, then use up to that number of surviving comparisons. Very large ensembles require more photometry work. Stellar-variability and fortuitous-variable ensembles can also retain fewer frames because every selected member must have a usable measurement in a retained frame.

Ensemble settings retain a single-comparison fallback when EXOTIC cannot build a usable ensemble, except when `"use_exactly_the_comps_provided"` is true. Exact-comparison mode fails explicitly if the supplied reference cannot be measured; it never silently substitutes or drops a supplied comparison. This makes the same reference star or ensemble reproducible across multiple runs.

Differential-magnitude CSV and plot products are always attempted independently of catalogue calibration. Set `"require_apparent_magnitudes": false` when catalogue-calibrated apparent magnitudes are not required; EXOTIC still writes apparent-magnitude products when calibration is available. Stellar-variability apparent and differential magnitudes use the raw target/reference flux ratio and are explicitly not airmass-corrected, because a real time-dependent stellar signal can be correlated with airmass. Airmass remains in the output as metadata.

Flux-bearing result files retain both magnitude representations. Final-lightcurve and differential-magnitude CSV rows explicitly include the raw, uncorrected differential magnitude and uncertainty alongside the corrected differential magnitude and uncertainty, plus apparent magnitude and uncertainty where applicable (or `na` when no catalogue calibration is available). Transit AAVSO files retain their standard exoplanet columns and add one preserved `#MAGNITUDE-XC` record per data row containing both raw and corrected differential values and the applied correction factor. When weighted linear out-of-transit baseline detrending is applied, `#OUT_OF_TRANSIT_BASELINE-XC` records the formula, BJD_TDB reference time, intercept, and slope; the standard `DIFF` and `ERR` rows are restored to their pre-detrending values and `DETREND_2` carries the correction function, making the operation reversible from the AAVSO file. AID rows retain the standard Extended format and store raw `DIFFMAG` and `DIFFERR` values while `MAG` and `MERR` remain the apparent magnitude measurement. All transit and AID AAVSO files are written in an `AAVSO_Files` subfolder of their corresponding output directory. That folder also receives copies of the final-lightcurve PNG, PDF, and CSV; every FOV finder-chart PNG and PDF; the normal, final, and zoomed triangle plots; the KTMF QC PNG and PDF; and the prior-versus-posterior comparison PNG and PDF. Finder charts label every selected comparison member, including ensembles and comparisons sourced outside AAVSO. This preserves the target-minus-reference measurement needed to apply a revised apparent-magnitude calibration later. Each reduction writes its run log from startup through shutdown to a unique `Diagnostics/EXOTIC_RunLog_<timestamp>_pid<PID>.log`, so separate or midnight-spanning runs do not overwrite or split one another.

For fortuitous VSX variables found during a transit reduction, `"photometer_fortuitous_variables": true` turns their photometry on; `"use_single_comparison_for_fortuitous_variables": true` selects one comparison (the default), while `false` requests an ensemble capped by `"maximum_number_of_ensemble_comparisons_for_stellar_variability"`. Fortuitous-variable differential products remain available when catalogue calibration is unavailable. Fortuitous-variable photometry has no no-comparison mode.

`photometer_fortuitous_variables` defaults to `true` for full FITS reductions with a WCS. EXOTIC searches the field in VSX, retains unsaturated stars whose reference-image source-plus-sky noise estimate implies an internal error below 0.05 mag, and measures each retained variable against one calibrated comparison star by default, or against its own calibrated comparison ensemble when `"use_single_comparison_for_fortuitous_variables"` is `false`. Exported light curves also retain only frames whose final comparison-calibrated internal magnitude error is below 0.05 mag. Each VSX target uses its own frame-level saturation mask: saturation of the exoplanet target does not remove that image from the VSX target's run, while saturated measurements of that VSX target or a reference star are masked only for the affected source and frame. The ensemble's high-side comparison-catalog error sigma clip has a 0.01 mag minimum threshold, so comparison errors at or below 0.01 mag are never rejected by that clip. Every ensemble AAVSO AID file includes an `#ENSEMBLE-COMPARISONS-XC` JSON header listing every selected comparison star with its label, RA, Dec, pixel position, and catalog calibration. Per-star plots, magnitude CSV, and ensemble-selection JSON are written below `variables/optimal_variables/<name>/` when the VSX period is at most 10 days and amplitude is at least 0.3 mag, or below `variables/normal/<name>/` otherwise; each AAVSO AID file is placed in that variable directory's `AAVSO_Files` subfolder. Skipped variables are recorded only in the shared `variables/FortuitousVariables_<date>.json` manifest and do not receive an object directory. Set `"photometer_fortuitous_variables"` to `false` to disable these products.

`use_nextastro_vsx_cache_first` defaults to `false`. When enabled, fortuitous-variable discovery queries `https://photometry.nextastro.org/vsx_query` first. EXOTIC falls back to AAVSO when the cache fails or returns no objects. Full-schema cache responses supply period and amplitude directly; legacy cache responses are enriched from AAVSO for optimal/normal classification.

## Features and Pipeline Architecture

- Automatic Plate Solution from http://nova.astrometry.net
Expand Down
Loading