stellarphot — Example User Flows#

These flowcharts show how a typical user moves through stellarphot, from configuring their equipment to submitting results.

Legend — the node types used on this page:

        flowchart LR
    classDef action fill:#e3f2fd,stroke:#1565c0,color:#212121
    classDef widget fill:#fff3e0,stroke:#ef6c00,color:#212121
    classDef artifact fill:#eceff1,stroke:#546e7a,color:#212121
    classDef external fill:#f3e5f5,stroke:#7b1fa2,color:#212121

    l_action(["A user action"]):::action
    l_widget["A stellarphot widget<br/>or function"]:::widget
    l_artifact[("A file in the<br/>working directory")]:::artifact
    l_external["An external service<br/>or web query"]:::external

    l_action ~~~ l_widget ~~~ l_artifact ~~~ l_external
    
  • Solid arrows — progression from one step to the next.

  • Dashed arrows — file reads and writes.

Flow 1 — Main photometry workflow (launcher notebooks 1 → 4)#

A first-time user configures their camera and observatory once (saved per-user), then for each night of images: inspects a star’s seeing profile to pick apertures, selects comparison stars, reviews the combined settings, and runs photometry on the whole folder.

Arrows: solid = progression from one step to the next; dashed = file reads and writes.

        flowchart LR
    classDef action fill:#e3f2fd,stroke:#1565c0,color:#212121
    classDef widget fill:#fff3e0,stroke:#ef6c00,color:#212121
    classDef artifact fill:#eceff1,stroke:#546e7a,color:#212121

    start(["Start JupyterLab,<br/>open launcher"]):::action

    subgraph sg_nb1["1 - Saveable settings"]
        direction TB
        w_review1["ReviewSettings:<br/>Camera, Observatory,<br/>PassbandMap"]:::widget
    end

    subgraph sg_nb2["2 - Seeing profile and comparison stars"]
        direction TB
        a_open["Open a FITS image,<br/>click on target star"]:::action
        w_seeing["SeeingProfileWidget:<br/>pick aperture radius from<br/>radial profile and SNR"]:::widget
        w_comp["ComparisonViewer:<br/>select comparison stars<br/>(APASS, VSX overlays)"]:::widget
    end

    subgraph sg_nb3["3 - Review settings"]
        direction TB
        w_review3["ReviewSettings:<br/>confirm all seven<br/>settings groups"]:::widget
    end

    subgraph sg_nb4["4 - Launch photometry"]
        direction TB
        a_pick["Choose one image of<br/>the object of interest"]:::action
        w_runner["PhotometryRunner:<br/>papermill executes<br/>photometry_runner.ipynb"]:::widget
        w_apphot["AperturePhotometry on<br/>every image in folder"]:::widget
    end

    saved[("per-user saved settings<br/>(cameras, observatories,<br/>passband maps)")]:::artifact
    partial[("partial_photometry_settings.json")]:::artifact
    srclist[("source_locations.ecsv")]:::artifact
    full[("photometry_settings.json")]:::artifact
    photecsv[("photometry.ecsv<br/>(PhotometryData)")]:::artifact

    start --> w_review1
    w_review1 -.->|"save"| saved
    start --> a_open
    a_open --> w_seeing
    w_seeing --> w_comp
    w_seeing -.->|"aperture settings"| partial
    w_comp -.->|"writes"| srclist
    w_comp -.->|"source list path"| partial
    w_review3 -.->|"reads"| partial
    saved -.->|"choose camera /<br/>observatory"| w_review3
    w_review3 -.->|"saves complete"| full
    a_pick --> w_runner
    w_runner --> w_apphot
    full -.->|"reads"| w_apphot
    srclist -.->|"reads"| w_apphot
    w_apphot -.->|"writes"| photecsv

    click w_review1 href "stellarphot/api_reference.html#module-stellarphot.gui" "custom_widgets.py"
    click w_seeing href "stellarphot/api_reference.html#module-stellarphot.gui" "seeing_profile_functions.py"
    click w_comp href "stellarphot/api_reference.html#module-stellarphot.gui" "comparison_functions.py"
    click w_review3 href "stellarphot/api_reference.html#module-stellarphot.gui" "custom_widgets.py"
    click w_runner href "stellarphot/api_reference.html#module-stellarphot.gui" "custom_widgets.py"
    click w_apphot href "stellarphot/api_reference.html#module-stellarphot.photometry.photometry" "photometry.py"
    

Source: seeing_profile_functions.py, comparison_functions.py, custom_widgets.py, photometry.py

Flow 2 — Exoplanet transit analysis#

Starting from the photometry table produced by Flow 1, the user computes relative fluxes, then fits transit models of increasing sophistication and prepares submission files.

Arrows: solid = progression from one step to the next; dashed = file reads and writes.

        flowchart LR
    classDef action fill:#e3f2fd,stroke:#1565c0,color:#212121
    classDef widget fill:#fff3e0,stroke:#ef6c00,color:#212121
    classDef artifact fill:#eceff1,stroke:#546e7a,color:#212121

    photecsv[("photometry.ecsv")]:::artifact

    subgraph sg_flux["Calculate relative flux"]
        direction TB
        w_flux["add_relative_flux_column():<br/>ensemble of comparison stars"]:::widget
    end

    relflux[("photometry-relative-flux.ecsv")]:::artifact
    ticinfo[("TIC-(id)-info.json")]:::artifact

    subgraph sg_fit1["Initial exoplanet model"]
        direction TB
        w_inputs1["TessAnalysisInputControls:<br/>choose photometry file,<br/>TIC info, passband"]:::widget
        w_fit1["TransitModelFit.setup_model()<br/>then .fit()"]:::widget
        w_plot1["plot_transit_lightcurve()"]:::widget
    end

    subgraph sg_fit2["Second exoplanet model fit"]
        direction TB
        w_fit2["TransitModelFit with<br/>detrending (airmass,<br/>width, sky) via<br/>TransitModelOptions"]:::widget
    end

    subgraph sg_exotic["Exoplanet model fit with EXOTIC"]
        direction TB
        w_exotic["exotic_settings_widget()<br/>populate_TOI_boxes()"]:::widget
        a_exotic["Run EXOTIC with<br/>generated settings"]:::action
    end

    exoticjson[("EXOTIC settings .json")]:::artifact
    aavso["PhotometryData<br/>.write_aavso_extended()"]:::widget
    aavsofile[("AAVSO extended<br/>format file")]:::artifact

    photecsv -.-> w_flux
    w_flux -.->|"writes"| relflux
    relflux -.-> w_inputs1
    ticinfo -.-> w_inputs1
    w_inputs1 --> w_fit1
    w_fit1 --> w_plot1
    w_plot1 --> w_fit2
    w_fit2 --> w_exotic
    w_exotic -.->|"writes"| exoticjson
    exoticjson -.-> a_exotic
    relflux -.-> aavso
    aavso -.->|"writes"| aavsofile

    click w_flux href "stellarphot/api_reference.html#module-stellarphot.differential_photometry" "aij_rel_fluxes.py"
    click w_inputs1 href "stellarphot/api_reference.html#module-stellarphot.gui" "photometry_widget_functions.py"
    click w_fit1 href "stellarphot/api_reference.html#module-stellarphot.transit_fitting" "transit_fitting/core.py"
    click w_plot1 href "stellarphot/api_reference.html#module-stellarphot.plotting" "transit_plots.py"
    click w_fit2 href "stellarphot/api_reference.html#module-stellarphot.transit_fitting" "transit_fitting/core.py"
    click w_exotic href "stellarphot/api_reference.html#module-stellarphot.gui.transit_fitting_gui" "gui/transit_fitting_gui.py"
    click aavso href "stellarphot/api_reference.html#module-stellarphot.core" "core.py"
    

Source: aij_rel_fluxes.py, photometry_widget_functions.py, transit_fitting/core.py, transit_plots.py, gui/transit_fitting_gui.py

Flow 3 — Supporting flows#

Generate a TESS target source list#

Run before Flow 1 when observing a TESS Object of Interest: it fetches the transit parameters and nearby GAIA sources so the photometry includes the stars TFOP wants checked.

Arrows: solid = progression from one step to the next; dashed = file reads and writes.

        flowchart LR
    classDef action fill:#e3f2fd,stroke:#1565c0,color:#212121
    classDef widget fill:#fff3e0,stroke:#ef6c00,color:#212121
    classDef artifact fill:#eceff1,stroke:#546e7a,color:#212121
    classDef external fill:#f3e5f5,stroke:#7b1fa2,color:#212121

    a_tic["Enter TIC ID or choose<br/>an image with one<br/>in its header"]:::action
    w_tps["TessPhotometrySetup"]:::widget
    f_setup["tess_photometry_setup()"]:::widget
    mast["MAST / ExoFOP<br/>(TOI.from_tic_id)"]:::external
    gaia["GAIA target list service<br/>(TessTargetFile)"]:::external
    info[("TIC-(id)-info.json")]:::artifact
    srclist[("TIC-(id)-source-list-input.ecsv")]:::artifact

    a_tic --> w_tps
    w_tps --> f_setup
    f_setup --> mast
    f_setup --> gaia
    f_setup -.->|"writes"| info
    f_setup -.->|"writes"| srclist

    click w_tps href "stellarphot/api_reference.html#module-stellarphot.gui" "custom_widgets.py"
    click f_setup href "stellarphot/api_reference.html#module-stellarphot.io" "io/tess.py"
    

Source: custom_widgets.py, io/tess.py

Calibrate magnitudes to a catalog (APASS DR9)#

Run after Flow 1 for variable-star work: instrumental magnitudes are transformed onto the catalog system, night by night.

Arrows: solid = progression from one step to the next; dashed = file reads and writes.

        flowchart LR
    classDef action fill:#e3f2fd,stroke:#1565c0,color:#212121
    classDef widget fill:#fff3e0,stroke:#ef6c00,color:#212121
    classDef artifact fill:#eceff1,stroke:#546e7a,color:#212121
    classDef external fill:#f3e5f5,stroke:#7b1fa2,color:#212121

    photecsv[("photometry.ecsv")]:::artifact
    a_load["Open 'Calibrate<br/>magnitudes' notebook"]:::action
    w_t2c["transform_to_catalog()"]:::widget
    apass["APASS DR9 / RefCat2<br/>via apass_dr9(), refcat2()"]:::external
    w_fit["curve_fit of<br/>calibrated_from_instrumental()"]:::widget
    calecsv[("photometry with<br/>calibrated mag columns")]:::artifact
    vsx["vsx_vizier() marks known<br/>variable stars"]:::external

    a_load -.->|"reads"| photecsv
    a_load --> w_t2c
    w_t2c --> apass
    w_t2c --> w_fit
    w_t2c --> vsx
    w_t2c -.->|"writes"| calecsv

    click w_t2c href "stellarphot/api_reference.html#module-stellarphot.utils" "magnitude_transforms.py"
    click w_fit href "stellarphot/api_reference.html#module-stellarphot.utils" "magnitude_transforms.py"
    

Source: magnitude_transforms.py