diff --git a/geminidr/core/primitives_spect.py b/geminidr/core/primitives_spect.py index eab1065ea..7d7990f6b 100644 --- a/geminidr/core/primitives_spect.py +++ b/geminidr/core/primitives_spect.py @@ -806,7 +806,7 @@ def _get_fit1d_input_data(ext, exptime, spec_table): uiparams = UIParameters(config) visualizer = fit1d.Fit1DVisualizer({"x": all_waves, "y": all_zpt, "weights": all_weights}, fitting_parameters=all_fp_init, - tab_name_fmt="CCD {}", + tab_name_fmt=lambda i: f"CCD {i+1}", xlabel=f'Wavelength ({xunits})', ylabel=f'Sensitivity ({yunits})', domains=all_domains, @@ -1354,7 +1354,7 @@ def determineWavelengthSolution(self, adinputs=None, **params): visualizer = WavelengthSolutionVisualizer( reconstruct_points, all_fp_init, modal_message="Re-extracting 1D spectra", - tab_name_fmt="Slit {}", + tab_name_fmt=lambda i: f"Slit {i+1}", xlabel="Fitted wavelength (nm)", ylabel="Non-linear component (nm)", domains=domains, title="Wavelength Solution", @@ -2987,7 +2987,7 @@ def recalc_fn(ad: AstroData, ui_parms: UIParameters): ui_params = UIParameters(config, reinit_params=reinit_params, extras=reinit_extras) visualizer = fit1d.Fit1DVisualizer(lambda ui_params: recalc_fn(ad, ui_params), fitting_parameters=[fit1d_params]*count, - tab_name_fmt="Slit {}", + tab_name_fmt=lambda i: f"Slit {i+1}", xlabel='Row', ylabel='Signal', domains=all_shapes, diff --git a/geminidr/gmos/primitives_gmos_longslit.py b/geminidr/gmos/primitives_gmos_longslit.py index 45f332c85..385c2d5ec 100644 --- a/geminidr/gmos/primitives_gmos_longslit.py +++ b/geminidr/gmos/primitives_gmos_longslit.py @@ -793,7 +793,7 @@ def reconstruct_points(ui_params=None): extras = {"row": RangeField("Row of data to operate on", int, int(nrows/2), min=1, max=nrows)} uiparams = UIParameters(config, reinit_params=reinit_params, extras=extras) visualizer = fit1d.Fit1DVisualizer(reconstruct_points, all_fp_init, - tab_name_fmt="CCD {}", + tab_name_fmt=lambda i: f"CCD {i+1}", xlabel='x (pixels)', ylabel='counts', domains=all_domains, title="Normalize Flat", diff --git a/geminidr/interactive/fit/fit1d.py b/geminidr/interactive/fit/fit1d.py index c70b45b55..ef687b069 100644 --- a/geminidr/interactive/fit/fit1d.py +++ b/geminidr/interactive/fit/fit1d.py @@ -1547,7 +1547,7 @@ def __init__( fitting_parameters, modal_message=None, modal_button_label=None, - tab_name_fmt="{}", + tab_name_fmt=None, xlabel="x", ylabel="y", domains=None, @@ -1590,8 +1590,8 @@ def __init__( If set and if modal_message was set, this will be used for the label on the recalculate button. It is not required. - tab_name_fmt : str - Format string for naming the tabs + tab_name_fmt : callable + Turns ext.id into a title for the tab name xlabel : str String label for X axis @@ -1770,6 +1770,9 @@ def kickoff_modal(attr, old, new): elif turbo_tabs: self.turbo = TabsTurboInjector(self.tabs) + + if tab_name_fmt is None: + tab_name_fmt = lambda i: f"Extension {i+1}" for i in range(self.nfits): extra_masks = {} @@ -1799,12 +1802,12 @@ def kickoff_modal(attr, old, new): if turbo_tabs: self.turbo.add_tab( - tui.component, title=tab_name_fmt.format(i + 1) + tui.component, title=str(tab_name_fmt(i)) ) else: tab = bm.TabPanel( - child=tui.component, title=tab_name_fmt.format(i + 1) + child=tui.component, title=str(tab_name_fmt(i)) ) self.tabs.tabs.append(tab) diff --git a/geminidr/interactive/fit/tracing.py b/geminidr/interactive/fit/tracing.py index d6e990f5b..56085377d 100644 --- a/geminidr/interactive/fit/tracing.py +++ b/geminidr/interactive/fit/tracing.py @@ -65,7 +65,7 @@ def interactive_trace_apertures(ext, fit1d_params, ui_params: UIParameters): fitting_parameters=fit_par_list, help_text=help_text, primitive_name="traceApertures", - tab_name_fmt="Aperture {}", + tab_name_fmt=lambda i: f"Aperture {i+1}", title="Interactive Trace Apertures", xlabel=xlabel, ylabel=ylabel,