Full changelog

1.9.0 (2020-02-25)

  • Added an experimental TessPLDCorrector class designed to correct TESS FFI light curves by detrending against local pixel time series. [#687]

  • Added a LightCurve.plot_river() method to plot river diagrams, which uses colors to visualize fluxes by period cycle (row) and phase (column). [#625]

  • Added caching to search_tesscut to avoid requesting an identical cut out more than once. [#481]

1.8.0 (2020-02-09)

  • Added the Seismology.interact_echelle() method for creating interactive asteroseismic echelle diagrams. [#625]

  • Added odd_mask and even_mask properties to FoldedLightCurve to make it easy to plot odd- and even-numbered transits. [#425]

  • Fixed a bug which caused TargetPixelFile.interact() to raise a ValueError if the pixel file contained NaN flux values. [#679]

  • Fixed minor issues in the tutorials. [#662, #683]

1.7.0 (2020-01-29)

  • Added a scale='linear' option to TargetPixelFile.interact() to show pixels using a linear stretch. The default is scale='log'. [#664]

  • Added a warning if SFFCorrector is used to correct TESS data. [#660]

  • Added improved sigma-clipping inside RegressionCorrector. [#654]

  • Fixed a bug which caused LightCurve.show_properties() to raise a ValueError when the time format was not set. [#655]

  • Fixed a bug which caused TargetPixelFile.interact() to crash if the pipeline aperture mask did not contain pixels. [#667]

  • Fixed a bug which caused RegressionCorrector.correct() to crash if the input light curve contained flux uncertainties <= 0. [#668]

1.6.0 (2019-12-16)

  • Fixed a bug in tpf.to_lightcurve() which caused flux and flux_err to be 0 instead of NaN for cadences with all-NaN pixels. [#651]

  • Added a new TESS data anomaly flag (bit 13 / value 4096) which was introduced in Sector 14 to mark cadences affected by strong scattered light. Compared to the original stray light flag (bit 12), this flag is set automatically by the pipeline based on background level thresholds. [#652]

  • Changed the requirements to make fbpca a required dependency, because it allows DesignMatrix.pca() to be faster and more robust. [#653]

1.5.2 (2019-12-05)

  • Fixed a bug introduced in v1.5.0 which caused an ImportError related to astropy.stats.calculate_bin_edges to be raised when a user has an older version of AstroPy installed (version <3.1 or <2.10). [#644]

  • Fixed a bug which caused the positions of stars in tpf.interact_sky() to be off by one pixel. [#638]

1.5.1 (2019-11-22)

  • Fixed a bug introduced in Lightkurve v1.5 which caused import lightkurve on Mac OSX to automatically select the Matplotlib Agg backend. [#640]

1.5.0 (2019-11-20)

  • Changed the representation of SearchResult objects to make it easier to see at a glance which quarter/campaign/sector a result belongs to. [#632]

  • Added mission, sector, camera, and ccd properties to TessLightCurveFile for consistency with TessTargetPixelFile. [#633]

  • Added the bins argument to LightCurve.bin() to enable custom binning by specifying the bin edges or the total number of bins. [#629]

  • Added transform_func & ylim_func keywords to interact() to support user-defined light curve transformations and y-axis limits. [#600]

  • Added to_stringray() and from_stingray() to LightCurve to enable interoperability with the Stingray spectral timing package. [#567]

  • Added an ax (axes) keyword to Seismology.plot_echelle() to enable Echelle diagrams to be plotted into an existing Matplotlib figure. [#635]

1.4.1 (2019-11-18)

  • Fixed a bug which caused search_targetpixelfile and search_lightcurvefile to raise an IndexError if the sector keyword was passed and the target was observed by both TESS & Kepler. [#631]

1.4.0 (2019-11-12)

  • Added the generic RegressionCorrector and DesignMatrix classes which provide a user-friendly way to use linear regression to remove background or systematic noise components from light curves. [#613]

  • Refactored the SFFCorrector class to use the new RegressionCorrector, which deprecated the polyorder keyword in favor of degree. [#613, #616, #617, #626]

  • Changed the tutorials index page in the online docs to make the tutorials easier to navigate.

  • Added a tutorial which demonstrates the use of Lightkurve’s seismology module to measure the mass, radius, and surface gravity of a solar-like star. [#624]

  • Changed SearchResult.download() to raise a more explicit HTTPError exception when MAST’s TESSCut service is overloaded and times out. [#627]

1.3.0 (2019-10-21)

  • Added a method="quadratic" option to tpf.estimate_centroids() which enables centroids to be estimated by fitting a bivariate polynomial to the 3x3 pixel core of the PSF. The method can also be called as a standalone function via lightkurve.utils.centroid_quadratic(). [#544, #610]

  • Fixed a bug in Seismology.plot_echelle() which caused the Echelle diagram of a power spectrum to be rendered incorrectly. [#602]

  • Fixed a bug which caused lightkurve.utils to be incorrectly resolved to lightkurve.seismology.utils. [#606]

  • Changed bkjd_to_astropy_time() and btjd_to_astropy_time() to accept a single float and lists of floats in addition to numpy arrays. [#608]

  • Improved support for creating a LombScarglePeriodogram with an unevenly sampled grid in frequency space. [#614]

1.2.0 (2019-10-01)

  • Added flux_unit and flux_quantity properties to the LightCurve class to enable users to keep track of a light curve’s flux units. [#591]

  • Changed the default behavior of LightCurve.plot() to use normalize=False, ie. plots now display a light curve in its intrinsic units by default. [#591]

  • Added an optional unit argument to LightCurve.normalize() to make it convenient to obtain a relative light curve in percent (unit='percent'), parts per thousand (unit='ppt') or parts per million (unit='ppm'). [#591]

  • Changed LombScarglePeriodogram.from_lightcurve() to not normalize the input light curve by default. [#591]

  • Changed LightCurve.normalize() to emit a warning if the light curve appears to be zero-centered. [#589]

  • Fixed an issue which caused the search functions to be incompatible with the latest version of astroquery (v0.3.10). [#598]

  • Added support for performing mathematical operations involving LightCurve objects, e.g. two LightCurve objects can now be added together. [#532]

  • Updated the online tutorials (https://docs.lightkurve.org/tutorials) to take all recent Lightkurve API changes into account. [#596]

1.1.1 (2019-08-19)

Lightkurve v1.1.1 is a bugfix release which includes the following changes:

  • Changed search_targetpixelfile() and search_lightcurvefile() to emit a helpful warning if an ambigous target identifier is used, i.e. if a number is entered in the range where the K2 EPIC and TESS TIC catalogs overlap. [#558]

  • Changed TargetPixelFile.plot() to always display the cadence number. [#562]

  • Changed TargetPixelFile.interact() to store light curves created using the tool in the SAP_FLUX column rather than the FLUX column of the new light curve file, for consistency with pipeline products. [#559]

  • Added scatter() and errorbar() methods to the LightCurveFile class to make it consistent with the LightCurve class. [#382]

  • Fixed a bug in KeplerTargetPixelFile.from_fits_images() to ensure the correct pixels are selected in cutout mode. [#571]

  • Fixed a series of minor documentation and code quality issues to enable Lightkurve to receive the “code quality A” certification by codacy.com. [#557, #560, #564, #565, #566, #568, #573, #574, #575]

1.1.0 (2019-07-19)

  • Added the lightkurve.seismology sub-package which enables quick-look asteroseismic quantities to be extracted from Periodogram objects. [#496]

  • Added the stitch() method to LightCurveCollection and LightCurveFileCollection to enable multi-sector/multi-quarter data to be combined more easily. [#548]

  • Improved the LightCurve.fill_gaps() method to fill gaps in a light curve with Gaussian noise proportional to the light curve’s CDPP. [#548]

  • Added the TargetPixelFile.cutout() method which enables smaller Target Pixel Files to be extracted from larger ones. [#537]

  • Added a pld_aperture_mask argument to PLDCorrector.correct() to enable users to select the pixels used for creating the PLD basis vectors. [#523]

  • Added a new unit test module (test_synthetic_data.py) which utilizes synthetic Target Pixel Files to validate Lightkurve features. [#534]

  • Added extra log.debug messages to lightkurve.search to enable users to track the status of search and download operations. [#547]

  • Added several new usage examples to the docstrings of functions. [#516]

  • Removed seven methods which had been deprecated prior to v1.0: [#515] * removed lc.cdpp() in favor of lc.estimate_cdpp(); * removed lc.correct() in favor of lc.to_corrector().correct(); * removed lcf.from_fits() in favor of lightkurve.open(); * removed tpf.from_fits() in favor of lightkurve.open(); * removed lcf.from_archive() in favor of search_lightcurvefile(); * removed tpf.from_archive() in favor of search_targetpixelfile(); * removed tpf.centroids() in favor of tpf.estimate_centroids().

  • Moved the Corrector systematics removal classes into their own sub-package, named lightkurve.correctors. [#519]

  • Fixed a bug which prevented lightkurve.open() from raising a FileNotFoundError when a file does not exist. [#540]

  • Fixed a bug which caused BoxLeastSquaresPeriodogram to ignore the period parameter. [#514]

  • Fixed a bug which prevented the t0 argument of lc.fold() from being an AstroPy Quantity object. [#521]

1.0.1 (2019-05-20)

This is a minor bugfix release containing the following improvements:

  • Fixed minor bugs in PLDCorrector.correct() [#498], TargetPixelFile.create_threshold_mask() [#502], and LightCurve.bin() [#503].

  • Ensure users are alerted if a large number of cadences are masked out by quality_bitmask when opening data products. [#495]

  • CBVCorrector now accepts a KeplerLightCurve as input. [#504]

  • The lightkurve.search functions now provide a more helpful error message if the download cache contains a corrupt file. [#512]

  • Switched continuous integration from Travis/Appveyor to Azure. [#497]

1.0.0 (2019-04-08)

This is the first stable release of Lightkurve. It was prepared with the help of 45 contributors!

This release contains major changes to the LombScarglePeriodogram class:

  • Changed the default behavior of LombScarglePeriodogram.from_lightcurve() to use normalization='amplitude' and oversample_factor=5 (the previous defaults were normalization='psd' and oversample_factor=1). The docstring has been expanded to help users understand these options. [#491]

  • Added a LightkurveWarning to alert users of the changes to the default behavior. [#493]

  • Deprecated the min_frequency/max_frequency arguments in favor of minimum_frequency/maximum_frequency to be consistent with the other Periodogram classes. [#478]

  • Likewise, deprecated the min_period/max_period arguments in favor of minimum_period/maximum_period to be consistent with the other Periodogram classes. [#478]

Other changes are:

  • Improved PLDCorrector to be more robust against the presence of NaNs. [#479, #488]

  • Improved search_tesscut to avoid crashing in the event of an empty search result, and to ensure that the files it returns carry the search string as the targetid attribute. [#475, #477]

  • Various minor bug fixes. [#488, #490, #494]

1.0b30 (2019-03-27)

  • Significantly improved the performance of the PLDCorrector feature for systematics removal. [#470]

  • Improved the normalization of the result returned by Periodogram.smooth(method='logmedian'). [#453]

  • Improved the visualization of NaN values in TargetPixelFile.plot(). [#455]

  • Various minor bug fixes. [#448, #450, #463, #471]

1.0b29 (2019-02-14)

  • The search_tesscut(...).download() feature now supports downloading rectangular TESS FFI cut-outs. It previously only supported squares. [#441]

  • Fixed a bug which prevented search_tesscut(...).download_all() from downloading all sectors. [#440]

  • Minor bug fixes and performance improvements. [#439, #446]

1.0b28 (2019-02-09)


  • Simplified the installation of Lightkurve by turning several packages into optional rather than required dependencies (celerite, pybind, scikit-learn, and bokeh). [#436]

  • Added search_tesscut(): an easy interface to access data produced using the MAST TESSCut service. This service extracts Target Pixel Files (TPFs) from TESS Full Frame Images (FFIs). [#418]

  • Added TargetPixelFile.interact_sky(): an interactive Bokeh widget to overlay Gaia DR2 source positions on top of TPFs. [#124]

  • Changed LightCurve.fold(): the transit_midpoint parameter has been deprecated in favor of the t0 parameter. [#419]


  • Made BoxLeastSquaresPeriodogram robust against light curves that contain NaNs. [#432]

  • TargetPixelFile.wcs now works for Target Pixel Files produced using the MAST TessCut service. [#434]

1.0b26 (2019-02-04)

  • Introduced a new layout for the online documentation. [#360, #400, #406]

  • Added LightCurve.interact_bls(): an interactive Bokeh widget to find planets using the Box Least Squares (BLS) method. [#401]

  • Added LombScarglePeriodogram and BoxLeastSquarePeriodogam sub-classes to distinguish periodograms generated using different methods. [#403]

  • Added the PLDCorrector class to remove instrument systematics using the Pixel Level Decorrelation (PLD) method. [#305]

  • Added the TargetPixelFile.to_corrector() convenience method to make systematics correction classes easy to access. [#305]

  • Refactored SFFCorrector to make its API consistent with PLDCorrector, and deprecated the LightCurve.correct() method in favor of LightCurve.to_corrector(). [#408, #417]

  • Made SFFCorrector robust against light curves that contain big gaps in time. [#414]

  • Minor bug fixes. [#392, #397, #420]

  • Increased the unit test coverage. [#387, #388]

1.0b25 (2018-12-14)

  • The TargetPixelFile.interact() bokeh app now includes a Save Lightcurve button [#329].

  • Fixed a minor bug in LightCurve.bin() [#377].

1.0b24 (2018-12-10)

  • Added support for TESS to search_targetpixelfile() and search_lightcurvefile() [#367].

  • Added support for data generated by the TESScut service [#369, #375].

  • Removed “Impulsive outliers” from the default set of quality constraints applied to TESS data [#374].

  • LightCurve.flatten() is now more robust against outliers [#372].

  • LightCurve.fold() now takes a transit_midpoint parameter instead of the phase parameter [#361, #363].

  • Various minor bugfixes [#372].

1.0b23 (2018-11-30)

  • TargetPixelFile.create_threshold_mask() now only returns one contiguous mask, which is configurable using the new reference_pixel argument [#345].

  • TargetPixelFile.interact(): now requires Bokeh v1.0 or later [#355].

  • utils.detect_filetype() automatically detects Kepler or TESS Target Pixel Files and Light Curve files [#340, #350, #356].

  • LightCurve.estimate_cdpp(): the argument sigma_clip was renamed into sigma [#359].

  • Fixed minor bugs in LightCurve.to_pandas() [#343], LightCurve.correct() [#347], FoldedLightCurve.errorbar() [#352], LightCurve.fold() [#353].

  • Documentation improvements [#344, #358].

  • Increased the unit test coverage [#351].

1.0b22 (2018-11-17)

  • lightkurve.open() was added to provide a single function to read in any light curve or target pixel file from Kepler or TESS and return the appropriate object [#317].

  • The from_fits() methods have been deprecated in favor of lightkurve.open() [#336].

  • The lightkurve.mast module has been removed in favor of the new lightkurve.search module.

  • Various small bugfixes, speed-ups, and documentation improvements [#314, #315, #322, #323, #325, #331, #334, #335].

1.0b21 (2018-10-29)

  • The from_archive() methods of KeplerTargetPixelFile and KeplerLightCurveFile have been deprecated in favor of the new search_targetpixelfile() and search_lightcurvefile() functions. These allow users to inspect the results of their queries and offer more powerful features, e.g. cone-searches. If you are currently using tpf = KeplerTargetPixelFile.from_archive("objectname"), please start using tpf = search_targetpixelfile("objectname").download() instead.

  • TargetPixelFile objects can now be indexed and sliced. [#308]

  • The default number of windows used by the SFF systematics removal algorithm has been changed from 1 to 10. [#312]

  • Various small bug fixes and unit test improvements.

1.0b20 (2018-10-16)

  • We adopted a rule that all method names must include a verb, and all class properties must be a noun [#286]. As a result, we renamed the following methods:

    • LightCurve.cdpp() is now LightCurve.estimate_cdpp()

    • LightCurve.periodogram() is now LightCurve.to_periodogram()

    • LichtCurve.properties() is now LightCurve.show_properties()

    • TargetPixelFile.aperture_photometry() is now TargetPixelFile.extract_aperture_photometry()

    • TargetPixelFile.centroids() is now TargetPixelFile.estimate_centroids()

    • TargetPixelFile.header() is now a property.

  • Added Periodogram.smooth() [#288].

  • Periodogram.estimate_snr() was renamed to Periodogram.p.flatten() [#290].

  • Lightkurve can now read in light curve files produced using LightCurveFile.to_fits() [#297].

1.0b19 (2018-10-10)

  • The Periodogram class has been refactored;

  • The LightCurve.remove_outliers() method now accepts sigma_lower and sigma_upper parameters.