Releases: dsavransky/EXOSIMS
v3.1.1
EXOSIMS v3.1.1
Minor bugfix release, addressing an issue encountered in process_opticalsys_package
in cases where the intensity map stellar diameter array is stored as a row rather than column array in the input FITS file. New behavior is to flatten the array, so long as it has only 1 non-singleton dimension.
Also adding a few useful attributes to TargetList
:
default_mode
: The detection mode, or the first characterization mode iffilter_for_char
is toggled.int_tmin
: The integration time associated withint_dMag
assuming the global local zodi minimum value.
v3.1.0
EXOSIMS v3.1.0
This release includes a fairly major reworking of the TargetList
, OpticalSystem
, and ZodiacalLight
prototypes, along with associated updates to multiple downstream implementations.
The OpticalSystem
prototype is updated to perform a basic set of integration time calculations assuming a non-photon counting model (a photon counting model is provided, as before, by the Nemati
implementation). This replaces the original behavior where the prototype generated fake integration times unrelated to the inputs. The OpticalSystem
initialization is restructured to allow for easier expansion of inputs in downstream implementations, and to also keep track of allowed keywords in the various OpticalSystem
dictionaries (i.e., scienceInstruments
, starlightSuppressionSystems
, and observingModes
).
In TargetList, calculation of stellar fluxes is significantly updated via the inclusion of the synphot
package as an upstream dependency. All relevant calculations using stellar template spectra and blackbody spectra are offloaded to synphot
. Every OpticalSystem
observingMode
now includes a synphot
bandpass model. There are also numerous updates to caching mechanisms to ensure proper caching of computed products, and the addition of computation of stellar diameters and effective temperatures for all targets.
OpticalSystem
Changes
- All
Nemati
andNemati2019
specific inputs are moved to those classes and removed from prototype. - New
starlightSuppressionSystem
allowed inputs:input_angle_units
(allows specification of input angle units as physical angles or lambda/D units),core_platescale_units
(same, forcore_platescale
),bandpass_model
andbandpass_step
specifyobservingMode
bandpass,use_core_thruput_for_ez
toggle use ofcore_thruput
vsocc_trans
in computing exozodi contribution,csv_angsep_colname
allows specification of angular separation column header for CSV table data. - New attributes:
allowed_observingMode_kws
,allowed_scienceInstrument_kws
, allowed_starlightSuppressionSystem_kwsused to track allowable inputs for each dictionary type.
vega_spectrum` contains Vega's spectrum. - Change in behavior: if
core_mean_intensity
is set for astarlightSuppressionSystem
, thecore_contrast
is not populated from defaults (and is set to None if not in the input dictionary). Ifcore_mean_intensity
is not Nonecore_platescale
may not be none (error is raised). - New methods:
populate_starlightSuppressionSystems
,populate_starlightSuppressionSystems_extra
,populate_scienceInstruments
,populate_scienceInstruments_extra
,populate_observingModes
, andpopulate_observingModes_extra
offload functionality previously in__init__
and make it easier to add new dictionary keys in inheriting implementations. - New
observingMode
keys:F0
(integration of Vega's spectrum over the observing bandpass),attenuation
(product of instrument and systemoptics
values),losses
(product of pupil area, QE, attenuation, and accounts for spectral resolution of spectrometers). - New method
get_core_mean_intensity
adds support for stellar-diameter core mean intensity table inputs.core_mean_intensity
lambda functions now take 3 inputs: wavelength, angular separation, and stellar diameter, the last of which defaults to 0 (unresolved). - New method
get_angle_unit_from_header
for processing angle units from inputs and FITS headers. - Updates to
get_coro_param
to allow more flexibility in processing FITS and CSV files. Adding special handling ofcore_area
such that the lambda function returns units (arcsec^2). All interpolants are now linear by default and occulter interpolants do not have inputs scaled by wavelength. - New helper method
Cp_Cb_Csp_helper
offloads most ofCp_Cb_Csp
functionality for easier overloading inNemati
. calc_intTime
implements the basic integration time model from Garrett et al. 2016/Nemati et al. 2014 (without photon counting effects). Infeasible integration times are now returned as NaN (not zero).int_time_denom_obj
moved toNemati
.- New method:
calc_saturation_dMag
computes saturation delta mag.
StarCatalog
Changes
- New input
VmagFill
(default 0.1) sets all Vmag values to avoid all zeros (which causes problems inTargetList
). StarCatalog
objects now provide an (optional)catalog_atts
attribute, which, if present, is used byTargetList
in place of its owncatlog_atts
default.- New implementation:
HWOMissionStars
provides a star catalog with the HWO Mission Star list by Mamajek and Stapelfeldt (see https://exoplanetarchive.ipac.caltech.edu/docs/2645_NASA_ExEP_Target_List_HWO_Documentation_2023.pdf)
SurveySimulation
Changes
- Removing redundant calculation of limiting delta mag (this is done via the saturation dMag in
TargetList
now).
TargetList
Changes
- New input
fillMissingBandMags
toggles filling missing band magnitudes (new flux calculation makes this generally unnecessary). - New helper methods
load_spectral_catalog
,get_template_spectrum
, andload_standard_bands
for spectral template library handling. - Rationalized helper methods:
stellar_Teff
,stellar_diameter
andstellar_mass
to all behave the same - all now generate attribute arrays of the relevant properties by default, and only fill values not provided by theStarCatalog
. - Methods
F0
,starF0
, andstarMag
are deprecated and replaced with new methodstarFlux
which directly computes the stellar flux in a given band. - Method
calc_intCutoff_dMag
deprecated and functionality folded intocalc_saturation_and_intCutoff_vals
. - Method
calc_saturation_dMag
deprecated and functionality moved intoOpticalSystem
.
ZodiacalLight
Changes
fZmap
is now computed to match the time step of thekoMap
s.fZQuads
is deprecated and replaced with two dictionaries:fZmins
andfZtypes
, which encode the same information in a more easily addressable fashion.calclogf
replaced withload_zodi_wavelength_data
, which is always called from the Prototype__init__
.calcfbetaInput
replaced withload_zodi_spatial_data
, which is always called from the Prototype__init__
.- New method
zodi_intensity_at_wavelength
computes the zodiacal light intensity as a function of wavelength - New method
zodi_color_correction_factor
to compute the zodiacal light color correction factor - New method
zodi_intensity_at_location
computes the zodiacal light intensity at a particular solar lat/lon at 500 nm - New method
zodi_latitudinal_correction_factor
computes the zodiacal light latitudinal correction factor
New Utilities
input_script_check
checks JSON scripts against their module specification for spurious/deprecated keywordsphotometricModels
collection of useful photometric models and extensions tosynphot
used byTargetList
radialfun
collection of routines for radial averaging and aperture arithmeticprocess_opticalsys_package
turns the standard Stark/Krist yield model coronagraph input files into EXOSIMS-standard inputs.
Internals
- Massive documentation updates. Switching from drawio diagrams to mermaid flowcharts.
setup.py
now reads requirements directly fromrequirements.txt
. More dependencies have explicit minimum versions.- Added
.readthedocs.yaml
for better control over documentation build.
Full Changelog: v3.0.4...v3.1.0
v3.1.0-alpha
EXOSIMS v3.1.0 Pre-Release
This release includes a fairly major reworking of the TargetList
, OpticalSystem
, and ZodiacalLight
prototypes, along with associated updates to multiple downstream implementations.
The OpticalSystem
prototype is updated to perform a basic set of integration time calculations assuming a non-photon counting model (a photon counting model is provided, as before, by the Nemati
implementation). This replaces the original behavior where the prototype generated fake integration times unrelated to the inputs. The OpticalSystem
initialization is restructured to allow for easier expansion of inputs in downstream implementations, and to also keep track of allowed keywords in the various OpticalSystem
dictionaries (i.e., scienceInstruments
, starlightSuppressionSystems
, and observingModes
).
In TargetList, calculation of stellar fluxes is significantly updated via the inclusion of the synphot
package as an upstream dependency. All relevant calculations using stellar template spectra and blackbody spectra are offloaded to synphot
. Every OpticalSystem
observingMode
now includes a synphot
bandpass model. There are also numerous updates to caching mechanisms to ensure proper caching of computed products, and the addition of computation of stellar diameters and effective temperatures for all targets.
OpticalSystem
Changes
- All
Nemati
andNemati2019
specific inputs are moved to those classes and removed from prototype. - New
starlightSuppressionSystem
allowed inputs:input_angle_units
(allows specification of input angle units as physical angles or lambda/D units),core_platescale_units
(same, forcore_platescale
),bandpass_model
andbandpass_step
specifyobservingMode
bandpass,use_core_thruput_for_ez
toggle use ofcore_thruput
vsocc_trans
in computing exozodi contribution,csv_angsep_colname
allows specification of angular separation column header for CSV table data. - New attributes:
allowed_observingMode_kws
,allowed_scienceInstrument_kws
, allowed_starlightSuppressionSystem_kwsused to track allowable inputs for each dictionary type.
vega_spectrum` contains Vega's spectrum. - Change in behavior: if
core_mean_intensity
is set for astarlightSuppressionSystem
, thecore_contrast
is not populated from defaults (and is set to None if not in the input dictionary). Ifcore_mean_intensity
is not Nonecore_platescale
may not be none (error is raised). - New methods:
populate_starlightSuppressionSystems
,populate_starlightSuppressionSystems_extra
,populate_scienceInstruments
,populate_scienceInstruments_extra
,populate_observingModes
, andpopulate_observingModes_extra
offload functionality previously in__init__
and make it easier to add new dictionary keys in inheriting implementations. - New
observingMode
keys:F0
(integration of Vega's spectrum over the observing bandpass),attenuation
(product of instrument and systemoptics
values),losses
(product of pupil area, QE, attenuation, and accounts for spectral resolution of spectrometers). - New method
get_core_mean_intensity
adds support for stellar-diameter core mean intensity table inputs.core_mean_intensity
lambda functions now take 3 inputs: wavelength, angular separation, and stellar diameter, the last of which defaults to 0 (unresolved). - New method
get_angle_unit_from_header
for processing angle units from inputs and FITS headers. - Updates to
get_coro_param
to allow more flexibility in processing FITS and CSV files. Adding special handling ofcore_area
such that the lambda function returns units (arcsec^2). All interpolants are now linear by default and occulter interpolants do not have inputs scaled by wavelength. - New helper method
Cp_Cb_Csp_helper
offloads most ofCp_Cb_Csp
functionality for easier overloading inNemati
. calc_intTime
implements the basic integration time model from Garrett et al. 2016/Nemati et al. 2014 (without photon counting effects). Infeasible integration times are now returned as NaN (not zero).int_time_denom_obj
moved toNemati
.- New method:
calc_saturation_dMag
computes saturation delta mag.
StarCatalog
Changes
- New input
VmagFill
(default 0.1) sets all Vmag values to avoid all zeros (which causes problems inTargetList
).
SurveySimulation
Changes
- Removing redundant calculation of limiting delta mag (this is done via the saturation dMag in
TargetList
now).
TargetList
Changes
- New input
fillMissingBandMags
toggles filling missing band magnitudes (new flux calculation makes this generally unnecessary). - New helper methods
load_spectral_catalog
,get_template_spectrum
, andload_standard_bands
for spectral template library handling. - Rationalized helper methods:
stellar_Teff
,stellar_diameter
andstellar_mass
to all behave the same - all now generate attribute arrays of the relevant properties by default. - Methods
F0
,starF0
, andstarMag
are deprecated and replaced with new methodstarFlux
which directly computes the stellar flux in a given band. - Method
calc_intCutoff_dMag
deprecated and functionality folded intocalc_saturation_and_intCutoff_vals
. - Method
calc_saturation_dMag
deprecated and functionality moved intoOpticalSystem
.
ZodiacalLight
Changes
fZmap
is now computed to match the time step of thekoMap
s.fZQuads
is deprecated and replaced with two dictionaries:fZmins
andfZtypes
, which encode the same information in a more easily addressable fashion.calclogf
replaced withload_zodi_wavelength_data
, which is always called from the Prototype__init__
.calcfbetaInput
replaced withload_zodi_spatial_data
, which is always called from the Prototype__init__
.- New method
zodi_intensity_at_wavelength
computes the zodiacal light intensity as a function of wavelength - New method
zodi_color_correction_factor
to compute the zodiacal light color correction factor - New method
zodi_intensity_at_location
computes the zodiacal light intensity at a particular solar lat/lon at 500 nm - New method
zodi_latitudinal_correction_factor
computes the zodiacal light latitudinal correction factor
New Utilities
input_script_check
checks JSON scripts against their module specification for spurious/deprecated keywordsphotometricModels
collection of useful photometric models and extensions tosynphot
used byTargetList
radialfun
collection of routines for radial averaging and aperture arithmeticprocess_opticalsys_package
turns the standard Stark/Krist yield model coronagraph input files into EXOSIMS-standard inputs.
Internals
- Massive documentation updates. Switching from drawio diagrams to mermaid flowcharts.
setup.py
now reads requirements directly fromrequirements.txt
.- Added
.readthedocs.yaml
for better control over documentation build.
Full Changelog: v3.0.4...v3.1.0-alpha
v3.0.4
EXOSIMS v3.0.4
Bugfix rollup release addressing the following issues:
- In the
TargetList
prototype thecalc_saturation_dMag
function always assumed that the denominator of the integration time used the model from Nemati. But thecalc_intTime
function treats occulters differently from coronagraphs. This logic was added to thecalc_saturation_dMag
function so that the values returned are infinite instead when ignoring speckle noise. - In
GarrettCompleteness
there was an error in the handling of infinitesmax
values, which are valid for occulters. Added a check that changes infinitesmax
values to the max float value. - In
HIPfromSimbad
fixed a bug that was caused by the distance line being commented out (and fixed the distance units).
v3.0.3
EXOSIMS v3.0.3
Minor bugfix release. numpy v1.24 expires the deprecation on ragged array creation. This fixes two instances of ragged array creation remaining in EXOSIMS. No functionality changes.
This release also adds minimum version requirements for most dependencies.
v3.0.2
Minor inefficiency fix. Previously, in TargetList
, the intCutoff_comp
calculation used comp_per_intTime
, which caused two successive computations of intCutoff_dMag
in a row. This has now been update to use comp_calc
, therefore removing the second, redundant calculation. The computed values do not change as a result of this update.
v3.0.1
EXOSIMS v3.0.1
This is a minor bugfix and utility release. The package MANIFEST has been properly updated to pick up all required data files, some of which were previously missing from the pypi package.
Additional bugfixes include:
- DulzPlavchanUniverse and KnownRVPlanetsUniverse now properly set phiIndex
- Fixed inconsistently documented luminosity units.
- Spectral types are now required to be matched and targets without known type are discarded. TargetList Spec string is overwritten with well-formatted string for easier downstream lookups.
- Removed urllib3 dependence, and updated IPAC querying for aliases and fixed alias caching system. These queries take a while, so adding a base list (all EXOCAT1 targets) to be distributed with the code.
- Added all missing prototype outspec keys and removed everything in prototypes that should not have gone into outspec.
Internals
- Added new attribute required_catalog_atts for use in the nan_filter (instead of filtering for nans in any attribute)
- Offloaded all fillPhotometryVals functionality to package MeanStars (and added it as a dependency)
- populate_targets now only does just that - other steps are moved back into the init.
- Added new method defining catalog attributes for easier overloading.
- Completneess init refactor. Abstracted completeness init functionality into two new class methods. This allows for much easier overloading and greatly reduced copy/pasted code in all completeness implementations.
Other
- flake8 whitelisting of SurveySimulations and utils has been removed. Plotting utilities have been moved to a top-level tools folder in the repository and will no longer be packaged with the rest of EXOSIMS in PyPI.
- Massive update to unit tests to speed up execution (without sacrificing coverage)
v3.0.0
EXOSIMS 3.0
EXOSIMS 3.0 fully deprecates all Python 2.7 support and now only works with Python 3.7+.
New Functionality
- New stationkeeping and continuous thrust occulter models from Soto et al. (2021)
- New planet population based on Guimond (2019)
- Updates to Nemati_2019 to keep pace with JPL internal ETC
- Adding ability to bookkeep slew and stationkeeping fuel separately during mission execution
- Slew and stationkeeping efficiency factors are now inputs (previously hard-coded)
- Solar radiation pressure parameters are now inputs (previously hard-coded)
- Limiting dMag values moved into TargetList, now calculated via the maximum integration time and the saturation time.
- Completeness values for maximum integration time and saturation time now TL attributes.
- intCutoff completeness used as TargetList filter, consolidating the completeness and integration time filters into one.
- Completeness's target_completeness function now calculates the integration time based on int_dMag, the user-input value that is limited to the integration cutoff dMag.
- Added root-finding to Nemati OpticalSystem calc_dMag_per_intTime function to avoid errors caused by clock-induced-charge.
- OpticalSystem now returns nan instead of 0 when there is a negative integration time.
- The ZodiacalLight fZ map is calculated correctly for each starlight suppression system and stored in a ZL attribute "fZMap", calculated using the generate_fZ method.
- Added caching for intCutoff_dMag, intCutoff_comp, saturation_dMag, saturation_comp.
- New functions in TL prototype to calculate saturation_dMag and intCutoff_dMag.
- ZodiacalLight now calculates the global fZ minimum.
- Added tqdm, pandas to requirements and setup. tqdm for progress bars, pandas for the getExoplanetArchive util and future development.
- New solar system twin planet population
- Adding basic refueling functionality
Deprecations
- Removed calc_min_intTime function because it was only used for filtering.
- Replaced "self.mode" SurveySim attribute with more descriptive "det_mode" variables. self.mode got set in the Prototype init and was only used in a single line that has been copy-pasted despite the fact that self.mode was always the detection mode, which is often already a variable in the other SurveySim modules.
Tests
- Massive updates to unit tests
- e2etests now use temporary cache directory (all new cache files generated on each run)
Internals
- Continuous integration now runs via github actions
- ICD and as-built documentation have been merged. Prototype docstrings will now serve as the formal ICD.
- CI tests include black and flake8 checks
v2.2.0
This release marks the beginning of formal deprecation of python 2.7 support. CI now only runs on python 3.7-3.9, and new code additions will not have any python 2.7 compatibility. Subsequent releases will remove existing python 2.7-specific code, and version 3.0 will not run at all on python 2.7 and will not be guaranteed for <3.7.
This release adds:
- Utilities for querying and caching the exoplanet archive (
utils.getExoplanetArchive
) - New forecaster-derived planet physical model as described in Savransky et al. 2019 (
PlanetPhysicalModel.ForecasterMod
) - New
utils.planet_star_separation
method similar todeltaMag
- Many solar system planet phase functions and other phase functions (
utils.phaseFunctions
) - Bug fix in
BrownCompleteness
when sample size is less than 1e8 - New planet population matching the one defined in Brown 2005 (
PlanetPopulation.Brown2005EarthLike
) whichPlanetPhaseFunction
keyword inPlanetPhysicalModel
allows selection of phase function without needing new module implementation. NB: This keyword is not included in the completeness cache files so all completeness caches will be regenerated.- Keepout map generation instructions in the quickstart guide
- Various comment cleanups throughout the code
v2.1.4
Re-release of 2.1.3 to synchronize with PyPI.