Source code for stellarphot.gui_tools.photometry_widget_functions

from pathlib import Path

import ipywidgets as ipw
from ipyautoui.custom import FileChooser

from stellarphot import PhotometryData
from stellarphot.settings.custom_widgets import Spinner

__all__ = ["TessAnalysisInputControls"]


[docs] class TessAnalysisInputControls(ipw.VBox): """ A class to hold the widgets for choosing TESS input """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) hidden = ipw.Layout(display="none") self.phot_chooser = FileChooser(filter_pattern=["*.csv", "*.fits", "*.ecsv"]) self._fits_openr = ipw.VBox( children=[ ipw.HTML(value="<h3>Select your photometry/flux file</h3>"), self.phot_chooser, ] ) self.tic_file_chooser = FileChooser(filter_pattern=["*.json"]) fits_openr2 = ipw.VBox( children=[ ipw.HTML(value="<h3>Select your TESS info file</h3>"), self.tic_file_chooser, ], layout=hidden, ) self._passband = ipw.Dropdown( description="Ccoose Filter", options=["gp", "ip"], disabled=True, layout=hidden, ) spinner = Spinner(message="<h4>Loading photometry...</h4>") self.phot_data = None def update_filter_list(_): spinner.start() self.phot_data = PhotometryData.read(self.phot_chooser.value) passband_data = self.phot_data["passband"] fits_openr2.layout.display = "flex" self._passband.layout.display = "flex" self._passband.options = sorted(set(passband_data)) self._passband.disabled = False self._passband.value = self._passband.options[0] spinner.stop() self.phot_chooser.observe(update_filter_list, names="_value") self.children = [self._fits_openr, spinner, fits_openr2, self._passband] @property def tic_info_file(self): p = Path(self.tic_file_chooser.value) selected_file = p.name if not selected_file: raise ValueError("No TIC info json file selected") return p @property def photometry_data_file(self): p = Path(self.phot_chooser.value) selected_file = p.name if not selected_file: raise ValueError("No photometry data file selected") return p @property def passband(self): return self._passband.value
def filter_by_dates( phot_times=None, use_no_data_before=None, use_no_data_between=None, use_no_data_after=None, ): n_dropped = 0 bad_data = phot_times < use_no_data_before n_dropped = bad_data.sum() if n_dropped > 0: print( f"👉👉👉👉 Dropping {n_dropped} data points before " f"BJD {use_no_data_before}" ) bad_data = bad_data | ( (use_no_data_between[0][0] < phot_times) & (phot_times < use_no_data_between[0][1]) ) new_dropped = bad_data.sum() - n_dropped if new_dropped: print( f"👉👉👉👉 Dropping {new_dropped} data points between " f"BJD {use_no_data_between[0][0]} and {use_no_data_between[0][1]}" ) n_dropped += new_dropped bad_data = bad_data | (phot_times > use_no_data_after) new_dropped = bad_data.sum() - n_dropped if new_dropped: print( f"👉👉👉👉 Dropping {new_dropped} data points after " f"BJD {use_no_data_after}" ) n_dropped += new_dropped return bad_data