Skip to content

Releases: dsavransky/EXOSIMS

v3.1.1

14 Apr 17:25
59f6a02
Compare
Choose a tag to compare

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 if filter_for_char is toggled.
  • int_tmin: The integration time associated with int_dMag assuming the global local zodi minimum value.

v3.1.0

12 Apr 01:45
f46844b
Compare
Choose a tag to compare

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 and Nemati2019 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, for core_platescale), bandpass_model and bandpass_step specify observingMode bandpass, use_core_thruput_for_ez toggle use of core_thruput vs occ_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 a starlightSuppressionSystem, the core_contrast is not populated from defaults (and is set to None if not in the input dictionary). If core_mean_intensity is not None core_platescale may not be none (error is raised).
  • New methods: populate_starlightSuppressionSystems, populate_starlightSuppressionSystems_extra, populate_scienceInstruments, populate_scienceInstruments_extra, populate_observingModes, and populate_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 system optics 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 of core_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 of Cp_Cb_Csp functionality for easier overloading in Nemati.
  • 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 to Nemati.
  • New method: calc_saturation_dMag computes saturation delta mag.

StarCatalog Changes

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, and load_standard_bands for spectral template library handling.
  • Rationalized helper methods: stellar_Teff, stellar_diameter and stellar_mass to all behave the same - all now generate attribute arrays of the relevant properties by default, and only fill values not provided by the StarCatalog.
  • Methods F0, starF0, and starMag are deprecated and replaced with new method starFlux which directly computes the stellar flux in a given band.
  • Method calc_intCutoff_dMag deprecated and functionality folded into calc_saturation_and_intCutoff_vals.
  • Method calc_saturation_dMag deprecated and functionality moved into OpticalSystem.

ZodiacalLight Changes

  • fZmap is now computed to match the time step of the koMaps.
  • fZQuads is deprecated and replaced with two dictionaries: fZmins and fZtypes, which encode the same information in a more easily addressable fashion.
  • calclogf replaced with load_zodi_wavelength_data, which is always called from the Prototype __init__.
  • calcfbetaInput replaced with load_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 keywords
  • photometricModels collection of useful photometric models and extensions to synphot used by TargetList
  • radialfun collection of routines for radial averaging and aperture arithmetic
  • process_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 from requirements.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

31 Mar 03:09
dc3efac
Compare
Choose a tag to compare
v3.1.0-alpha Pre-release
Pre-release

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 and Nemati2019 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, for core_platescale), bandpass_model and bandpass_step specify observingMode bandpass, use_core_thruput_for_ez toggle use of core_thruput vs occ_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 a starlightSuppressionSystem, the core_contrast is not populated from defaults (and is set to None if not in the input dictionary). If core_mean_intensity is not None core_platescale may not be none (error is raised).
  • New methods: populate_starlightSuppressionSystems, populate_starlightSuppressionSystems_extra, populate_scienceInstruments, populate_scienceInstruments_extra, populate_observingModes, and populate_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 system optics 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 of core_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 of Cp_Cb_Csp functionality for easier overloading in Nemati.
  • 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 to Nemati.
  • 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 in TargetList).

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, and load_standard_bands for spectral template library handling.
  • Rationalized helper methods: stellar_Teff, stellar_diameter and stellar_mass to all behave the same - all now generate attribute arrays of the relevant properties by default.
  • Methods F0, starF0, and starMag are deprecated and replaced with new method starFlux which directly computes the stellar flux in a given band.
  • Method calc_intCutoff_dMag deprecated and functionality folded into calc_saturation_and_intCutoff_vals.
  • Method calc_saturation_dMag deprecated and functionality moved into OpticalSystem.

ZodiacalLight Changes

  • fZmap is now computed to match the time step of the koMaps.
  • fZQuads is deprecated and replaced with two dictionaries: fZmins and fZtypes, which encode the same information in a more easily addressable fashion.
  • calclogf replaced with load_zodi_wavelength_data, which is always called from the Prototype __init__.
  • calcfbetaInput replaced with load_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 keywords
  • photometricModels collection of useful photometric models and extensions to synphot used by TargetList
  • radialfun collection of routines for radial averaging and aperture arithmetic
  • process_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 from requirements.txt.
  • Added .readthedocs.yaml for better control over documentation build.

Full Changelog: v3.0.4...v3.1.0-alpha

v3.0.4

07 Mar 17:44
de2a968
Compare
Choose a tag to compare

EXOSIMS v3.0.4

Bugfix rollup release addressing the following issues:

  • In the TargetList prototype the calc_saturation_dMag function always assumed that the denominator of the integration time used the model from Nemati. But the calc_intTime function treats occulters differently from coronagraphs. This logic was added to the calc_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 infinite smax values, which are valid for occulters. Added a check that changes infinite smax 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

07 Feb 03:02
17386b5
Compare
Choose a tag to compare

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

15 Dec 21:40
bb26f80
Compare
Choose a tag to compare

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

17 Nov 20:21
9d605c9
Compare
Choose a tag to compare

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

03 Nov 00:18
0d99186
Compare
Choose a tag to compare

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

14 Mar 16:37
7b3e29b
Compare
Choose a tag to compare

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 to deltaMag
  • 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 in PlanetPhysicalModel 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

10 Mar 16:32
901e4bf
Compare
Choose a tag to compare

Re-release of 2.1.3 to synchronize with PyPI.