diskmelts 2.3.0__tar.gz → 2.3.1__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.
- {diskmelts-2.3.0/src/diskmelts.egg-info → diskmelts-2.3.1}/PKG-INFO +1 -1
- {diskmelts-2.3.0 → diskmelts-2.3.1}/pyproject.toml +1 -1
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_fitting.py +4 -2
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_read_plot.py +59 -15
- {diskmelts-2.3.0 → diskmelts-2.3.1/src/diskmelts.egg-info}/PKG-INFO +1 -1
- {diskmelts-2.3.0 → diskmelts-2.3.1}/LICENSE +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/MANIFEST.in +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/README.md +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/setup.cfg +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/__init__.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/__init__.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/_api.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/_core.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/cont_ranges.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/cont_ranges_PPan.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_extended.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_extended.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_rich.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_rich.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/ttauri.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/ttauri.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/water.csv +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/water.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/fitting.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/13CO2_single_v2/net_13CO2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H4_single_v2/net_C2H4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H6_single_v2/net_C2H6_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2HD_single_v2/net_C2HD_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C3H4_single_v2/net_C3H4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C4H2_single_v2/net_C4H2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C6H6_single_v2/net_C6H6_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CH3_single_v2/net_CH3_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CH4_single_v2/net_CH4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO17O_single_v2/net_CO17O_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO18O_single_v2/net_CO18O_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO2_single_v2/net_CO2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/HC3N_single_v2/net_HC3N_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/HCN_single_v2/net_HCN_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/OH_single_v2/net_OH_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/13CO2_single_v2/net_13CO2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H4_single_v2/net_C2H4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H6_single_v2/net_C2H6_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2HD_single_v2/net_C2HD_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C3H4_single_v2/net_C3H4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C4H2_single_v2/net_C4H2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C6H6_single_v2/net_C6H6_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CH3_single_v2/net_CH3_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CH4_single_v2/net_CH4_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO17O_single_v2/net_CO17O_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO18O_single_v2/net_CO18O_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO2_single_v2/net_CO2_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/HC3N_single_v2/net_HC3N_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/HCN_single_v2/net_HCN_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/OH_single_v2/net_OH_forward.pt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/plotting.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/trainmodel.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/uncertainty.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_grid_fitting.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_paper_comparison.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/validation.py +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/SOURCES.txt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/dependency_links.txt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/requires.txt +0 -0
- {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/top_level.txt +0 -0
|
@@ -468,8 +468,10 @@ def fit_observation(input_path=None, stages=None, *, name=None, root=None, sigma
|
|
|
468
468
|
are absent), ``obs_wav``, ``obs_flux``, ``obs_err`` (the filtered
|
|
469
469
|
input), ``residual`` and ``cumulative_model`` after all stages,
|
|
470
470
|
``sigma_noise``, ``grid_sigma``, and ``products`` (saved file paths).
|
|
471
|
-
|
|
472
|
-
``
|
|
471
|
+
To plot the result, call ``plot_saved_observation`` with
|
|
472
|
+
``output_dir`` and the same spectrum: the same CSV path, these
|
|
473
|
+
returned ``obs_wav``/``obs_flux`` arrays, or no spectrum at all (the
|
|
474
|
+
saved one is then used).
|
|
473
475
|
"""
|
|
474
476
|
model_root = MODEL_ROOT if root is None else Path(root)
|
|
475
477
|
model_specs = _model_specs_for_sigma(sigma)
|
|
@@ -27,11 +27,38 @@ def _ranges(value, active_molecules=None):
|
|
|
27
27
|
return [tuple(map(float, pair)) for pair in value]
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
INPUT_MISMATCH_HINT = (
|
|
31
|
+
'The spectrum given to plot_saved_observation is not the one the CSVs in '
|
|
32
|
+
'result_dir were fitted on. Either result_dir holds results from an earlier '
|
|
33
|
+
'fit with the same name, or the input arrays changed after fitting. Re-run '
|
|
34
|
+
"the fit, pass the arrays the fit returned (result['obs_wav'], "
|
|
35
|
+
"result['obs_flux']), or omit the spectrum to plot the saved one."
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _same_array(actual, expected, description, hint=None):
|
|
40
|
+
if actual.shape != expected.shape:
|
|
41
|
+
detail = f'{actual.size} saved vs {expected.size} given pixels'
|
|
42
|
+
elif not np.allclose(actual, expected, rtol=1e-7, atol=1e-12, equal_nan=True):
|
|
43
|
+
detail = f'max |difference| = {np.nanmax(np.abs(actual - expected)):.3g}'
|
|
44
|
+
else:
|
|
45
|
+
return
|
|
46
|
+
message = f'{description} disagrees with the saved fitting sequence ({detail})'
|
|
47
|
+
raise ValueError(f'{message}. {hint}' if hint else message)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _saved_observation(result_dir, source_name, stages):
|
|
51
|
+
"""Observed wavelength and flux saved by the first stage with results."""
|
|
52
|
+
for stage in stages:
|
|
53
|
+
path = Path(result_dir) / f"{source_name}_{stage['name']}_fit_spectrum.csv"
|
|
54
|
+
if path.is_file():
|
|
55
|
+
spectrum = pd.read_csv(path)
|
|
56
|
+
return (spectrum['wave'].to_numpy(dtype=float),
|
|
57
|
+
spectrum['flux'].to_numpy(dtype=float))
|
|
58
|
+
raise FileNotFoundError(
|
|
59
|
+
f'No saved stage spectrum for {source_name!r} in {result_dir}; '
|
|
60
|
+
'check name and result_dir, or pass input_path or obs_wav/obs_flux'
|
|
61
|
+
)
|
|
35
62
|
|
|
36
63
|
|
|
37
64
|
def read_stage_result(result_dir, source_name, stage_name):
|
|
@@ -114,10 +141,19 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
|
|
|
114
141
|
obs_wav=None, obs_flux=None):
|
|
115
142
|
"""Read saved stage CSVs, validate their sequence, and plot the fits.
|
|
116
143
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
144
|
+
The observed spectrum can be given in three ways:
|
|
145
|
+
|
|
146
|
+
- the same CSV ``input_path`` that was fitted;
|
|
147
|
+
- the same ``obs_wav``/``obs_flux`` arrays that were fitted, ideally
|
|
148
|
+
``result['obs_wav']`` and ``result['obs_flux']`` from the fit;
|
|
149
|
+
- nothing: the spectrum saved with the first stage's results is used.
|
|
150
|
+
|
|
151
|
+
A given spectrum is checked against the saved results, and a mismatch
|
|
152
|
+
(for example results left from an earlier fit with the same ``name``)
|
|
153
|
+
raises ``ValueError``. ``result_dir`` and ``stages`` are the fit's
|
|
154
|
+
``output_dir`` and stage list; ``name`` is the fit's ``name`` (the saved
|
|
155
|
+
file prefix), and is required when no CSV is given unless the fit used
|
|
156
|
+
the default ``'spectrum'``.
|
|
121
157
|
|
|
122
158
|
``active_stages`` should be the names returned by a fresh fitting run. If
|
|
123
159
|
omitted, stages with complete saved CSV products are plotted. This also
|
|
@@ -131,11 +167,15 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
|
|
|
131
167
|
"""
|
|
132
168
|
if result_dir is None or stages is None:
|
|
133
169
|
raise ValueError('result_dir and stages are required')
|
|
134
|
-
obs_wav, obs_flux, _, source_name = _read_observation(
|
|
135
|
-
input_path, obs_wav, obs_flux, name=name, skiprows=skiprows,
|
|
136
|
-
delimiter=delimiter, wav_col=wav_col, flux_col=flux_col,
|
|
137
|
-
)
|
|
138
170
|
result_dir = Path(result_dir)
|
|
171
|
+
if input_path is None and obs_wav is None and obs_flux is None:
|
|
172
|
+
source_name = name or 'spectrum'
|
|
173
|
+
obs_wav, obs_flux = _saved_observation(result_dir, source_name, stages)
|
|
174
|
+
else:
|
|
175
|
+
obs_wav, obs_flux, _, source_name = _read_observation(
|
|
176
|
+
input_path, obs_wav, obs_flux, name=name, skiprows=skiprows,
|
|
177
|
+
delimiter=delimiter, wav_col=wav_col, flux_col=flux_col,
|
|
178
|
+
)
|
|
139
179
|
figure_dir = Path(figure_dir) if figure_dir else result_dir / 'figures'
|
|
140
180
|
if sigma_noise is None:
|
|
141
181
|
sigma_noise = _estimate_noise(obs_wav, obs_flux, None, line_free_windows)
|
|
@@ -171,8 +211,12 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
|
|
|
171
211
|
if requested is None and not Path(f'{prefix}_fit_spectrum.csv').is_file():
|
|
172
212
|
continue
|
|
173
213
|
fit = read_stage_result(result_dir, source_name, stage_name)
|
|
174
|
-
_same_array(fit['obs_wav'], obs_wav, f'{stage_name} observed wavelength'
|
|
175
|
-
|
|
214
|
+
_same_array(fit['obs_wav'], obs_wav, f'{stage_name} observed wavelength',
|
|
215
|
+
INPUT_MISMATCH_HINT)
|
|
216
|
+
_same_array(fit['obs_flux'], prior_residual, f'{stage_name} input flux',
|
|
217
|
+
INPUT_MISMATCH_HINT if not fits else
|
|
218
|
+
'The saved stages come from different fitting runs; '
|
|
219
|
+
're-run the full fit.')
|
|
176
220
|
prior_residual = fit['residual']
|
|
177
221
|
cumulative += fit['model_flux']
|
|
178
222
|
_same_array(fit['running_cumulative'], cumulative,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|