flits 1.2.0__tar.gz → 1.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flits-1.2.0/flits.egg-info → flits-1.2.2}/PKG-INFO +25 -29
- {flits-1.2.0 → flits-1.2.2}/README.md +23 -27
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/dm-optimization.md +7 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/measurements.md +7 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/rm-synthesis.md +1 -1
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/temporal-spectral.md +6 -0
- flits-1.2.2/docs/assets/guided-workflow/dm-sweep.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/export-panel.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/load-session.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/measurement-summary.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/prepared-viewer.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/session-panel.png +0 -0
- flits-1.2.2/docs/assets/guided-workflow/temporal-acf.png +0 -0
- flits-1.2.2/docs/assets/session-state.svg +42 -0
- flits-1.2.2/docs/developer/joss-submission.md +79 -0
- {flits-1.2.0 → flits-1.2.2}/docs/developer/testing.md +4 -3
- flits-1.2.2/docs/examples/gbt-reference-requirements.txt +50 -0
- flits-1.2.2/docs/examples/gbt-reference-session.json +4988 -0
- flits-1.2.2/docs/examples/gbt-reference-summary.json +27 -0
- {flits-1.2.0 → flits-1.2.2}/docs/getting-started.md +9 -0
- flits-1.2.2/docs/guided-workflow.md +156 -0
- {flits-1.2.0 → flits-1.2.2}/docs/index.md +23 -32
- {flits-1.2.0 → flits-1.2.2}/docs/installation.md +4 -4
- {flits-1.2.0 → flits-1.2.2}/docs/references.md +1 -1
- {flits-1.2.0 → flits-1.2.2}/docs/user-guide/exports-and-snapshots.md +11 -0
- {flits-1.2.0 → flits-1.2.2}/docs/user-guide/headless-replay.md +8 -5
- {flits-1.2.0 → flits-1.2.2}/docs/user-guide/session-workflow.md +12 -0
- {flits-1.2.0 → flits-1.2.2}/flits/__init__.py +1 -1
- {flits-1.2.0 → flits-1.2.2}/flits/cli.py +1 -1
- {flits-1.2.0 → flits-1.2.2/flits.egg-info}/PKG-INFO +25 -29
- {flits-1.2.0 → flits-1.2.2}/flits.egg-info/SOURCES.txt +9 -1
- {flits-1.2.0 → flits-1.2.2}/pyproject.toml +1 -1
- {flits-1.2.0 → flits-1.2.2}/requirements.txt +4 -4
- flits-1.2.0/docs/assets/guided-workflow/dm-sweep.png +0 -0
- flits-1.2.0/docs/assets/guided-workflow/measurement-summary.png +0 -0
- flits-1.2.0/docs/assets/guided-workflow/prepared-viewer.png +0 -0
- flits-1.2.0/docs/assets/guided-workflow/session-reproducibility.png +0 -0
- flits-1.2.0/docs/guided-workflow.md +0 -127
- {flits-1.2.0 → flits-1.2.2}/LICENSE +0 -0
- {flits-1.2.0 → flits-1.2.2}/MANIFEST.in +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/drift.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/localization.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/model-fitting.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/analysis/temporal-multiscale.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/assets/javascripts/mathjax.js +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/assets/rm-synthesis/rmtools-reference-example.png +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/developer/api-reference.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/developer/custom-readers.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/developer/publishing.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/examples/rmtools-LICENSE.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/examples/rmtools-reference-input.json +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/examples/rmtools-reference-summary.json +0 -0
- {flits-1.2.0 → flits-1.2.2}/docs/user-guide/supported-formats.md +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/__main__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/dm_optimization/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/dm_optimization/core.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/drift/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/drift/core.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/fitting/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/fitting/fitburst_adapter.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/localization.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/morphology/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/morphology/widths.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/polarization/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/polarization/rm_synthesis.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/polarization/workflow.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/spectral/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/spectral/core.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/temporal/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/temporal/core.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/analysis/temporal/multiscale.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/exports.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/chime.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/chime_hdf5_reader.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/errors.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/filterbank.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/psrfits.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/reader.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/sigproc.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/validation.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/io/your_reader.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/measurements.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/models.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/session.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/settings.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/signal.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/stokes.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/timing.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web/__init__.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web/app.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web_static/app.js +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web_static/index.html +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web_static/styles.css +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web_static/vendor/plotly-2.35.2.LICENSE.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits/web_static/vendor/plotly-2.35.2.min.js +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits.egg-info/dependency_links.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits.egg-info/entry_points.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits.egg-info/requires.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/flits.egg-info/top_level.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/requirements-dev.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/requirements-full.txt +0 -0
- {flits-1.2.0 → flits-1.2.2}/setup.cfg +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_calibration.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_cli_replay.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_dedispersion.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_detection.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_dm_optimization.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_drift_analysis.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_exports.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_frequency_order.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_frontend_e2e.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_frontend_ui_safety.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_frontend_uncertainty_metadata.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_frontend_viewer_styles.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_io_plugin.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_io_readers.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_localization.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_measurements.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_model_fitting.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_polarization_real_data.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_polarization_reproducibility.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_polarization_workflow.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_preprocessing.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_preset_detection.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_rm_synthesis.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_session_io_smoke.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_session_polarization.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_session_smoke.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_session_snapshots.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_spectral_analysis.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_stokes_basis.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_stokes_reader.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_temporal_multiscale.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_timing.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_web_api.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_web_http.py +0 -0
- {flits-1.2.0 → flits-1.2.2}/tests/test_width_analysis.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flits
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: Browser-based FRB burst analysis software (SIGPROC, PSRFITS, CHIME/FRB HDF5)
|
|
5
5
|
Author: Dirk Kuiper
|
|
6
6
|
License-Expression: GPL-3.0-only
|
|
7
7
|
Project-URL: Homepage, https://github.com/DirkKuiper/flits
|
|
8
|
-
Project-URL: Documentation, https://github.
|
|
8
|
+
Project-URL: Documentation, https://dirkkuiper.github.io/flits/
|
|
9
9
|
Project-URL: Issues, https://github.com/DirkKuiper/flits/issues
|
|
10
10
|
Project-URL: Releases, https://github.com/DirkKuiper/flits/releases
|
|
11
11
|
Project-URL: Repository, https://github.com/DirkKuiper/flits
|
|
@@ -64,36 +64,32 @@ including public catalog waterfalls and beamformed `BBData`
|
|
|
64
64
|
`tiedbeam_power` files. The I/O layer is pluggable — third parties can
|
|
65
65
|
register custom formats via `importlib` entry points without forking.
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
measurements without a browser.
|
|
67
|
+
The selected analysis state is recorded in a JSON session snapshot. Given
|
|
68
|
+
the snapshot and original data, `flits replay` restores the selections and
|
|
69
|
+
recomputes supported measurements without a browser.
|
|
70
|
+
|
|
71
|
+

|
|
72
|
+
|
|
73
|
+
The [guided GBT workflow](https://dirkkuiper.github.io/flits/guided-workflow/)
|
|
74
|
+
walks through the selections and results shown in the interface.
|
|
70
75
|
|
|
71
76
|
## Why FLITS exists
|
|
72
77
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
with different bandwidths, polarization conventions and SEFDs.
|
|
89
|
-
|
|
90
|
-
FLITS makes the session, rather than the script, the unit of analysis. One
|
|
91
|
-
interface covers every supported instrument, the reader layer absorbs the format
|
|
92
|
-
differences, telescope presets carry the instrument-specific calibration, and
|
|
93
|
-
the snapshot makes the analysis inspectable and replayable afterwards.
|
|
94
|
-
Measurements state their own uncertainty basis: FLITS separates a formal 1-sigma
|
|
95
|
-
uncertainty from a statistical-only one, and will not mark a fluence publishable
|
|
96
|
-
when the SEFD systematic it needs was never supplied.
|
|
78
|
+
Measuring a detected burst involves selecting an event window and noise
|
|
79
|
+
reference, masking interference, choosing a frequency range, and refining the
|
|
80
|
+
dispersion measure (DM). These choices affect the resulting measurements and
|
|
81
|
+
must be preserved to interpret and reproduce them.
|
|
82
|
+
|
|
83
|
+
FLITS was built for a repeater campaign spanning GBT at L and P band, Nançay,
|
|
84
|
+
Westerbork, Onsala, Stockert, and CHIME. A common reader interface and configurable
|
|
85
|
+
telescope presets support analysis across their formats and calibration
|
|
86
|
+
conventions. The session retains the selected state so collaborators can
|
|
87
|
+
reopen it and recompute supported measurements from the original data.
|
|
88
|
+
|
|
89
|
+
FLITS builds on specialist search, data-processing, and analysis packages. It
|
|
90
|
+
connects measurements through a shared session model with explicit calibration
|
|
91
|
+
and uncertainty metadata. Flux and fluence estimates without a supplied SEFD
|
|
92
|
+
uncertainty are flagged as having an incomplete uncertainty budget.
|
|
97
93
|
|
|
98
94
|
FLITS is not a search pipeline — it starts from a burst you already have.
|
|
99
95
|
|
|
@@ -17,36 +17,32 @@ including public catalog waterfalls and beamformed `BBData`
|
|
|
17
17
|
`tiedbeam_power` files. The I/O layer is pluggable — third parties can
|
|
18
18
|
register custom formats via `importlib` entry points without forking.
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
measurements without a browser.
|
|
20
|
+
The selected analysis state is recorded in a JSON session snapshot. Given
|
|
21
|
+
the snapshot and original data, `flits replay` restores the selections and
|
|
22
|
+
recomputes supported measurements without a browser.
|
|
23
|
+
|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
The [guided GBT workflow](https://dirkkuiper.github.io/flits/guided-workflow/)
|
|
27
|
+
walks through the selections and results shown in the interface.
|
|
23
28
|
|
|
24
29
|
## Why FLITS exists
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
with different bandwidths, polarization conventions and SEFDs.
|
|
42
|
-
|
|
43
|
-
FLITS makes the session, rather than the script, the unit of analysis. One
|
|
44
|
-
interface covers every supported instrument, the reader layer absorbs the format
|
|
45
|
-
differences, telescope presets carry the instrument-specific calibration, and
|
|
46
|
-
the snapshot makes the analysis inspectable and replayable afterwards.
|
|
47
|
-
Measurements state their own uncertainty basis: FLITS separates a formal 1-sigma
|
|
48
|
-
uncertainty from a statistical-only one, and will not mark a fluence publishable
|
|
49
|
-
when the SEFD systematic it needs was never supplied.
|
|
31
|
+
Measuring a detected burst involves selecting an event window and noise
|
|
32
|
+
reference, masking interference, choosing a frequency range, and refining the
|
|
33
|
+
dispersion measure (DM). These choices affect the resulting measurements and
|
|
34
|
+
must be preserved to interpret and reproduce them.
|
|
35
|
+
|
|
36
|
+
FLITS was built for a repeater campaign spanning GBT at L and P band, Nançay,
|
|
37
|
+
Westerbork, Onsala, Stockert, and CHIME. A common reader interface and configurable
|
|
38
|
+
telescope presets support analysis across their formats and calibration
|
|
39
|
+
conventions. The session retains the selected state so collaborators can
|
|
40
|
+
reopen it and recompute supported measurements from the original data.
|
|
41
|
+
|
|
42
|
+
FLITS builds on specialist search, data-processing, and analysis packages. It
|
|
43
|
+
connects measurements through a shared session model with explicit calibration
|
|
44
|
+
and uncertainty metadata. Flux and fluence estimates without a supplied SEFD
|
|
45
|
+
uncertainty are flagged as having an incomplete uncertainty budget.
|
|
50
46
|
|
|
51
47
|
FLITS is not a search pipeline — it starts from a burst you already have.
|
|
52
48
|
|
|
@@ -105,6 +105,13 @@ That state is what the session snapshot records.
|
|
|
105
105
|
|
|
106
106
|
## Reading the result
|
|
107
107
|
|
|
108
|
+

|
|
109
|
+
|
|
110
|
+
*The DMphase curve peaks near a residual DM of 5.5 on the sampled grid; the
|
|
111
|
+
weighted fit reports about 5.41. The lower plot compares sub-band arrival-time
|
|
112
|
+
residuals at the applied and fitted DMs. See the [GBT guided workflow](../guided-workflow.md)
|
|
113
|
+
for the inputs and interpretation limits of this example.*
|
|
114
|
+
|
|
108
115
|
| Output | What to look at |
|
|
109
116
|
| --- | --- |
|
|
110
117
|
| Score curve | Should have a clear single maximum. Multiple comparable peaks mean the metric cannot distinguish them. |
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
FLITS reports measurements from the current prepared session state.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
*The Prepare tab groups selection readiness, headline measurements, timing
|
|
8
|
+
details, and uncertainty flags. These values come from the [GBT guided
|
|
9
|
+
workflow](../guided-workflow.md); its absolute TOA fields are not part of the
|
|
10
|
+
validated reference calculation.*
|
|
11
|
+
|
|
5
12
|
## Core outputs
|
|
6
13
|
|
|
7
14
|
The measurement workflow can report:
|
|
@@ -83,7 +83,7 @@ print(result.linear_fraction, result.circular_fraction)
|
|
|
83
83
|
`result.rm_synthesis` holds the full RM-synthesis payload documented below.
|
|
84
84
|
The result also records the basis and what established it, the exact event and
|
|
85
85
|
off-pulse windows, the channels that survived, and the integrated Stokes I, Q, U
|
|
86
|
-
and V spectra — which
|
|
86
|
+
and V spectra — which supports replay from the snapshot and original data.
|
|
87
87
|
|
|
88
88
|
### Reading the cube directly
|
|
89
89
|
|
|
@@ -53,6 +53,12 @@ is built to remove exactly this S/N dependence.
|
|
|
53
53
|
|
|
54
54
|
## ACF widths are not durations
|
|
55
55
|
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
*The dashed line marks normalized ACF = 0.5. Its intersections with the curves
|
|
59
|
+
give self-similarity widths in time and frequency for the [GBT example](../guided-workflow.md),
|
|
60
|
+
not the manually selected event duration.*
|
|
61
|
+
|
|
56
62
|
An ACF width is a self-similarity scale. It is a good way to compare coherence
|
|
57
63
|
structure between bursts or between time and frequency, but it is not
|
|
58
64
|
interchangeable with the full burst duration, and the two can differ by a large
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1040" height="270" viewBox="0 0 1040 270" role="img" aria-labelledby="title description">
|
|
2
|
+
<title id="title">How one FLITS session carries selections into analysis and export</title>
|
|
3
|
+
<desc id="description">A source file and applied DM lead to prepared crop, event, off-pulse, spectral, and mask selections. Those shared selections feed measurements and specialist analysis tabs. Results and selections can then be saved as a session snapshot or exported as products.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
|
|
6
|
+
<path d="M1 1 L9 5 L1 9" fill="none" stroke="#5c358a" stroke-width="2"/>
|
|
7
|
+
</marker>
|
|
8
|
+
</defs>
|
|
9
|
+
<rect width="1040" height="270" rx="18" fill="#faf8fd"/>
|
|
10
|
+
<g font-family="Arial, Helvetica, sans-serif" fill="#252132">
|
|
11
|
+
<rect x="24" y="56" width="182" height="160" rx="14" fill="#fff" stroke="#d9cfe9" stroke-width="2"/>
|
|
12
|
+
<text x="44" y="94" font-size="22" font-weight="700">Load</text>
|
|
13
|
+
<text x="44" y="127" font-size="16">Source file</text>
|
|
14
|
+
<text x="44" y="152" font-size="16">Applied DM</text>
|
|
15
|
+
<text x="44" y="177" font-size="16">Preset / calibration</text>
|
|
16
|
+
|
|
17
|
+
<rect x="244" y="32" width="245" height="208" rx="14" fill="#f1e9fa" stroke="#9e7ac4" stroke-width="2"/>
|
|
18
|
+
<text x="264" y="70" font-size="22" font-weight="700">Prepare</text>
|
|
19
|
+
<text x="264" y="104" font-size="16">Crop + event window</text>
|
|
20
|
+
<text x="264" y="129" font-size="16">Off-pulse windows</text>
|
|
21
|
+
<text x="264" y="154" font-size="16">Spectral window</text>
|
|
22
|
+
<text x="264" y="179" font-size="16">Channel mask</text>
|
|
23
|
+
<text x="264" y="211" font-size="13" fill="#5c358a">Shared session state</text>
|
|
24
|
+
|
|
25
|
+
<rect x="528" y="56" width="232" height="160" rx="14" fill="#fff" stroke="#d9cfe9" stroke-width="2"/>
|
|
26
|
+
<text x="548" y="94" font-size="22" font-weight="700">Analyze</text>
|
|
27
|
+
<text x="548" y="127" font-size="16">Compute measurements</text>
|
|
28
|
+
<text x="548" y="152" font-size="16">DM / Temporal / Drift</text>
|
|
29
|
+
<text x="548" y="177" font-size="16">Fitting / Polarization</text>
|
|
30
|
+
|
|
31
|
+
<rect x="799" y="56" width="217" height="160" rx="14" fill="#fff" stroke="#d9cfe9" stroke-width="2"/>
|
|
32
|
+
<text x="819" y="94" font-size="22" font-weight="700">Keep results</text>
|
|
33
|
+
<text x="819" y="127" font-size="16">Save session snapshot</text>
|
|
34
|
+
<text x="819" y="152" font-size="16">Download JSON</text>
|
|
35
|
+
<text x="819" y="177" font-size="16">Build export bundle</text>
|
|
36
|
+
</g>
|
|
37
|
+
<g fill="none" stroke="#5c358a" stroke-width="2.5" marker-end="url(#arrow)">
|
|
38
|
+
<path d="M207 136 H236"/>
|
|
39
|
+
<path d="M490 136 H519"/>
|
|
40
|
+
<path d="M761 136 H790"/>
|
|
41
|
+
</g>
|
|
42
|
+
</svg>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# JOSS manuscript preparation
|
|
2
|
+
|
|
3
|
+
The manuscript is `paper/paper.md`, with references in `paper/paper.bib` and
|
|
4
|
+
software citation metadata in `CITATION.cff`. The JOSS Paper workflow validates
|
|
5
|
+
these files and builds an official JOSS draft PDF on relevant pull requests.
|
|
6
|
+
|
|
7
|
+
## Validate the manuscript
|
|
8
|
+
|
|
9
|
+
From the repository root, in a Python environment:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
python -m pip install -r paper/requirements.txt
|
|
13
|
+
python paper/check.py
|
|
14
|
+
cffconvert --validate
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The checker verifies section coverage, word count, citation keys, ORCID
|
|
18
|
+
checksums, matching title and author identifiers, and unfinished author markers.
|
|
19
|
+
For the final reference audit, also run:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
python paper/check.py --check-dois
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This requires `curl` and network access. It checks DOI resolution and compares
|
|
26
|
+
bibliographic titles, volumes, issues, and pages with Crossref. A resolving DOI
|
|
27
|
+
can still point to the wrong article. Author lists, attribution, and references
|
|
28
|
+
without DOIs also need human review.
|
|
29
|
+
|
|
30
|
+
## Build the official proof
|
|
31
|
+
|
|
32
|
+
Download the `paper` artifact from the JOSS Paper workflow, or build locally
|
|
33
|
+
with [Inara](https://github.com/openjournals/inara) and Docker:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
docker run --rm --volume "$PWD/paper:/data" \
|
|
37
|
+
--user "$(id -u):$(id -g)" --env JOURNAL=joss openjournals/inara
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Inspect `paper/paper.pdf`, including every reference page. The draft watermark
|
|
41
|
+
and placeholder DOI, publication details, and submission date are supplied by
|
|
42
|
+
the journal template and are replaced during the publication process.
|
|
43
|
+
|
|
44
|
+
## Check the supporting materials
|
|
45
|
+
|
|
46
|
+
Run the [software checks](testing.md), the
|
|
47
|
+
[GBT reference workflow](../guided-workflow.md), and the
|
|
48
|
+
[RM-synthesis reference example](../analysis/rm-synthesis.md). The Reference
|
|
49
|
+
Workflows action checks the GBT measurements and portable replay on Linux,
|
|
50
|
+
using both the published package and the current checkout with pinned
|
|
51
|
+
dependencies. The example data remain a separate downloadable release asset;
|
|
52
|
+
the reference snapshot and expected results are in `docs/examples/`.
|
|
53
|
+
|
|
54
|
+
Before submission, the authors should review the final proof and agree on
|
|
55
|
+
authorship, affiliations, contribution credit, funding acknowledgements,
|
|
56
|
+
conflicts of interest, and the AI disclosure. Confirm that its statements about
|
|
57
|
+
human review and scientific decisions accurately describe the work. The
|
|
58
|
+
disclosure names the known assistants and explicitly records the absence of a
|
|
59
|
+
systematic historical model/version record; it does not invent missing details.
|
|
60
|
+
|
|
61
|
+
The submission form should identify any related science or methods papers,
|
|
62
|
+
including manuscripts in preparation or under review. Retain factual evidence
|
|
63
|
+
of the research uses described in the paper, such as a project report or
|
|
64
|
+
analysis record, in case the editors request it. Confirm credit for any
|
|
65
|
+
additional contributors before submission.
|
|
66
|
+
|
|
67
|
+
## Submission and the final archive
|
|
68
|
+
|
|
69
|
+
Follow the current [JOSS submission requirements](https://joss.readthedocs.io/en/latest/submitting.html)
|
|
70
|
+
and [paper guidance](https://joss.readthedocs.io/en/latest/paper.html). The
|
|
71
|
+
manuscript and software must be available together in the public repository;
|
|
72
|
+
a submission branch is allowed. Use the branch containing the final reviewed
|
|
73
|
+
manuscript if it has not yet been merged.
|
|
74
|
+
|
|
75
|
+
After review, archive the exact final tagged software release with Zenodo or
|
|
76
|
+
figshare and provide its version and archival DOI. A final archive DOI is not
|
|
77
|
+
required for the initial submission. Preserve the example data, provenance,
|
|
78
|
+
and sharing terms in a suitable archive as well; a GitHub release asset alone
|
|
79
|
+
does not establish that a separate archival deposit exists.
|
|
@@ -59,11 +59,12 @@ They need Playwright and a browser binary:
|
|
|
59
59
|
```bash
|
|
60
60
|
python -m pip install pytest-playwright
|
|
61
61
|
python -m playwright install chromium
|
|
62
|
-
python -m pytest tests/test_frontend_e2e.py -q
|
|
62
|
+
python -m pytest tests/test_frontend_e2e.py -q -m e2e
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
The default test configuration excludes browser and local-observatory-data
|
|
66
|
+
tests. Select `-m e2e` explicitly for the browser run above. Without Playwright
|
|
67
|
+
installed the browser module skips. CI runs them in a dedicated job. To skip them explicitly:
|
|
67
68
|
|
|
68
69
|
```bash
|
|
69
70
|
python -m pytest -m "not e2e"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
annotated-doc==0.0.5
|
|
2
|
+
annotated-types==0.8.0
|
|
3
|
+
anyio==4.15.1
|
|
4
|
+
astropy==8.0.1
|
|
5
|
+
astropy-iers-data==0.2026.9.21.0.56.25
|
|
6
|
+
click==8.5.0
|
|
7
|
+
cloudpickle==3.1.2
|
|
8
|
+
contourpy==1.4.0
|
|
9
|
+
cycler==0.12.1
|
|
10
|
+
fastapi==0.139.2
|
|
11
|
+
flits==1.2.0
|
|
12
|
+
fonttools==4.65.0
|
|
13
|
+
h11==0.16.0
|
|
14
|
+
h5py==3.16.0
|
|
15
|
+
idna==3.20
|
|
16
|
+
ImageIO==2.37.4
|
|
17
|
+
jess==0.3.1
|
|
18
|
+
joblib==1.6.0
|
|
19
|
+
kiwisolver==1.5.1
|
|
20
|
+
lazy-loader==0.5
|
|
21
|
+
llvmlite==0.49.0
|
|
22
|
+
markdown-it-py==4.2.0
|
|
23
|
+
matplotlib==3.11.1
|
|
24
|
+
mdurl==0.1.2
|
|
25
|
+
narwhals==2.26.0
|
|
26
|
+
networkx==3.6.1
|
|
27
|
+
numba==0.67.0
|
|
28
|
+
numpy==2.4.6
|
|
29
|
+
packaging==26.3
|
|
30
|
+
pandas==3.0.6
|
|
31
|
+
pillow==12.3.0
|
|
32
|
+
pydantic==2.13.4
|
|
33
|
+
pydantic_core==2.46.4
|
|
34
|
+
pyerfa==2.0.1.5
|
|
35
|
+
Pygments==2.21.0
|
|
36
|
+
pyparsing==3.3.3
|
|
37
|
+
python-dateutil==2.9.0.post0
|
|
38
|
+
PyYAML==6.0.3
|
|
39
|
+
rich==15.0.0
|
|
40
|
+
scikit-image==0.26.0
|
|
41
|
+
scikit-learn==1.9.1
|
|
42
|
+
scipy==1.17.1
|
|
43
|
+
six==1.17.0
|
|
44
|
+
starlette==1.6.0
|
|
45
|
+
threadpoolctl==3.7.0
|
|
46
|
+
tifffile==2026.9.20
|
|
47
|
+
typing-inspection==0.4.4
|
|
48
|
+
typing_extensions==4.16.0
|
|
49
|
+
uvicorn==0.51.0
|
|
50
|
+
your==0.6.7
|