From 53c69c71ceb02784bf4e44696c546cec0d1d5ac5 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 18 Jan 2026 19:43:36 +0000 Subject: [PATCH 01/20] (synthesize) fix ipres scalar handling in broadening path --- src/pysme/synthesize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index 23a4c6bb..360646f2 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -984,7 +984,7 @@ def synthesize_segment( # instrument broadening if "iptype" in sme: logger.debug("Apply detector broadening") - ipres = sme.ipres if np.size(sme.ipres) == 1 else sme.ipres[segment] + ipres = sme.ipres.item() if np.size(sme.ipres) == 1 else sme.ipres[segment] sint = broadening.apply_broadening(ipres, wint, sint, type=sme.iptype, sme=sme) # Apply the correction on Ha, Hb and Hgamma line here. From 1f9c6c089ca7b787152fdfe976efa19fe5b15996 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Fri, 23 Jan 2026 23:00:28 +0900 Subject: [PATCH 02/20] (vald) reatin ValdFile after indexing --- src/pysme/linelist/vald.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/pysme/linelist/vald.py b/src/pysme/linelist/vald.py index 4b9776ee..603a250c 100644 --- a/src/pysme/linelist/vald.py +++ b/src/pysme/linelist/vald.py @@ -142,6 +142,28 @@ def load(filename): """ return ValdFile(filename) + + def __getitem__(self, index): + if isinstance(index, str) and hasattr(self, index): + return getattr(self, index) + if isinstance(index, (list, str)): + if len(index) == 0: + return_list = deepcopy(self) + return_list._lines = self._lines.iloc[[]] + return_list.nlines = len(return_list._lines) + return return_list + values = self._lines[index].values + if index in self.string_columns: + values = values.astype(str) + return values + + if isinstance(index, int): + index = slice(index, index + 1) + return_list = deepcopy(self) + return_list._lines = self._lines.iloc[index] + return_list.nlines = len(return_list._lines) + return return_list + def identify_valdtype(self, lines): """Determines whether the file was created with extract_all, extract_stellar, or extract_element and whether it is in long or short format From 196f4eef6932e4f8c9f2c3b6b7ed62d402efb5e0 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Fri, 23 Jan 2026 23:02:03 +0900 Subject: [PATCH 03/20] (vald) fix bug on species keyword for dll.GetOpacity --- src/pysme/sme_synth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pysme/sme_synth.py b/src/pysme/sme_synth.py index 83afa59e..b7905040 100644 --- a/src/pysme/sme_synth.py +++ b/src/pysme/sme_synth.py @@ -416,7 +416,7 @@ def GetOpacity(self, switch, species=None, key=None): if key is not None: kwargs["key"] = key if species is not None: - kwargs["species "] = species + kwargs["species"] = species return _smelib.GetOpacity(switch, **kwargs) def Ionization(self, ion=0): From a0d32aea4ed6c34c738ce89c9a607819214b409b Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sat, 24 Jan 2026 00:45:25 +0900 Subject: [PATCH 04/20] (sme_synth_faster) fix ACCOL opacity extraction bug --- src/pysme/smelib/_smelib.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pysme/smelib/_smelib.cpp b/src/pysme/smelib/_smelib.cpp index 26302bee..7f3333b0 100644 --- a/src/pysme/smelib/_smelib.cpp +++ b/src/pysme/smelib/_smelib.cpp @@ -791,7 +791,8 @@ static PyObject *smelib_GetOpacity(PyObject *self, PyObject *args, PyObject *kwd PyArrayObject *arr; static const char *keywords[] = {"flag", "species", "key", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ss", const_cast(keywords), &choice)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ss", const_cast(keywords), + &choice, &species, &key)) return NULL; if (strcmp(choice, "COPSTD") == 0) From ed3b3ece80db97644a3a57de2aa607e50296c5c8 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 26 Jan 2026 20:44:07 +0900 Subject: [PATCH 05/20] (smelib) expose GetFraction function ot python --- src/pysme/smelib/_smelib.cpp | 45 +++++++++++++++++++++++++++++ src/pysme/smelib/sme_synth_faster.h | 1 + 2 files changed, 46 insertions(+) diff --git a/src/pysme/smelib/_smelib.cpp b/src/pysme/smelib/_smelib.cpp index 7f3333b0..68b54b18 100644 --- a/src/pysme/smelib/_smelib.cpp +++ b/src/pysme/smelib/_smelib.cpp @@ -793,7 +793,9 @@ static PyObject *smelib_GetOpacity(PyObject *self, PyObject *args, PyObject *kwd static const char *keywords[] = {"flag", "species", "key", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ss", const_cast(keywords), &choice, &species, &key)) + { return NULL; + } if (strcmp(choice, "COPSTD") == 0) number = -3; @@ -891,6 +893,48 @@ static PyObject *smelib_GetOpacity(PyObject *self, PyObject *args, PyObject *kwd return (PyObject *)arr; } +static char smelib_GetFraction_docstring[] = "Returns fraction/partition function for a species"; +static PyObject *smelib_GetFraction(PyObject *self, PyObject *args, PyObject *kwds) +{ + int n = 4; + void *args_c[4]; + const char *result = NULL; + char *species = NULL; + short mode = 2; + short length; + IDL_STRING species_idl; + + PyArrayObject *arr; + + static const char *keywords[] = {"species", "mode", NULL}; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|h", const_cast(keywords), + &species, &mode)) + return NULL; + + species_idl.slen = strlen(species); + species_idl.s = species; + species_idl.stype = 0; + + length = GetNRHOX(); + npy_intp dims[] = {length}; + arr = (PyArrayObject *)PyArray_SimpleNew(1, dims, NPY_DOUBLE); + + args_c[0] = &species_idl; + args_c[1] = &mode; + args_c[2] = &length; + args_c[3] = PyArray_DATA(arr); + + result = GetFraction(n, args_c); + + if (result != NULL && result[0] != OK_response) + { + Py_DECREF(arr); + PyErr_SetString(PyExc_RuntimeError, result); + return NULL; + } + return (PyObject *)arr; +} + static char smelib_Ionization_docstring[] = "Perform EOS calculations"; static PyObject *smelib_Ionization(PyObject *self, PyObject *args) { @@ -1379,6 +1423,7 @@ static PyMethodDef module_methods[] = { {"InputAbund", smelib_InputAbund, METH_VARARGS, smelib_InputAbund_docstring}, {"Opacity", smelib_Opacity, METH_NOARGS, smelib_Opacity_docstring}, {"GetOpacity", (PyCFunction)(void (*)(void))smelib_GetOpacity, METH_VARARGS | METH_KEYWORDS, smelib_GetOpacity_docstring}, + {"GetFraction", (PyCFunction)(void (*)(void))smelib_GetFraction, METH_VARARGS | METH_KEYWORDS, smelib_GetFraction_docstring}, {"Ionization", smelib_Ionization, METH_VARARGS, smelib_Ionization_docstring}, {"GetDensity", smelib_GetDensity, METH_NOARGS, smelib_GetDensity_docstring}, {"GetNatom", smelib_GetNatom, METH_NOARGS, smelib_GetNatom_docstring}, diff --git a/src/pysme/smelib/sme_synth_faster.h b/src/pysme/smelib/sme_synth_faster.h index 35e421f6..82119627 100644 --- a/src/pysme/smelib/sme_synth_faster.h +++ b/src/pysme/smelib/sme_synth_faster.h @@ -58,6 +58,7 @@ extern "C" const char *SME_DLL ResetDepartureCoefficients(int n, void *arg[]); / extern "C" const char *SME_DLL InputAbund(int n, void *arg[]); /* Read in abundances */ extern "C" const char *SME_DLL Opacity(int n, void *arg[]); /* Calculate opacities */ extern "C" const char *SME_DLL GetOpacity(int n, void *arg[]); /* Returns specific cont. opacity */ +extern "C" const char *SME_DLL GetFraction(int n, void *arg[]); /* Returns fraction or partition function */ extern "C" const char *SME_DLL Ionization(int n, void *arg[]); /* Perfrom EOS calculations */ extern "C" const char *SME_DLL GetDensity(int n, void *arg[]); /* Returns density in g/cm^3 */ extern "C" const char *SME_DLL GetNatom(int n, void *arg[]); /* Returns atomic number density */ From 1a6d3c49802c79b51f215f31f675de73a9916ba3 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Tue, 10 Feb 2026 22:53:08 +0900 Subject: [PATCH 06/20] (sme_synth) add GetFraction API --- src/pysme/sme_synth.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/pysme/sme_synth.py b/src/pysme/sme_synth.py index b7905040..e1f4251c 100644 --- a/src/pysme/sme_synth.py +++ b/src/pysme/sme_synth.py @@ -473,6 +473,21 @@ def GetNelec(self): """ return _smelib.GetNelec() + def GetFraction(self, species, mode=0): + """ + Get species fraction/partition function/number density. + + Parameters + ---------- + species : str + Species name in SPLIST (e.g., 'Fe', 'Fe+', 'CO') + mode : int, optional + 0: number density (FRACT * PF) + 1: partition function + other: FRACT + """ + return _smelib.GetFraction(species, mode=mode) + def Transf( self, mu, @@ -652,4 +667,4 @@ def GetContributionfunction(self, mu, wave, nwmax=400000, long_continuum=True): if long_continuum: return table, ctable else: - return table \ No newline at end of file + return table From 5dd8ce9bbe61422cdb37b2a255e35eee6f83378c Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Wed, 11 Feb 2026 02:25:48 +0900 Subject: [PATCH 07/20] (sme_synth) add switch for line selection --- src/pysme/sme_synth.py | 15 +++++ src/pysme/smelib/_smelib.cpp | 101 ++++++++++++++++++++++++++++ src/pysme/smelib/sme_synth_faster.h | 4 +- src/pysme/synthesize.py | 60 +++++++++++++++-- 4 files changed, 174 insertions(+), 6 deletions(-) diff --git a/src/pysme/sme_synth.py b/src/pysme/sme_synth.py index e1f4251c..2e572e2f 100644 --- a/src/pysme/sme_synth.py +++ b/src/pysme/sme_synth.py @@ -148,6 +148,21 @@ def ClearH2broad(self): """Clear flag for H2 molecule""" self.SetH2broad(False) + def SetLineInfoMode(self, mode): + """Set handling mode for precomputed line info (0=internal, 1=use_if_valid, 2=trust).""" + _smelib.SetLineInfoMode(int(mode)) + + def InputLinePrecomputedInfo(self, line_range_s, line_range_e, strong_mask, central_depth=None): + """Input precomputed line ranges and strong mask to SMElib.""" + range_s = np.ascontiguousarray(line_range_s, dtype=np.float64) + range_e = np.ascontiguousarray(line_range_e, dtype=np.float64) + strong = np.ascontiguousarray(strong_mask, dtype=np.uint8) + if central_depth is None: + _smelib.InputLinePrecomputedInfo(range_s, range_e, strong) + else: + depth = np.ascontiguousarray(central_depth, dtype=np.float64) + _smelib.InputLinePrecomputedInfo(range_s, range_e, strong, depth) + def InputLineList(self, linelist): """ Read in line list diff --git a/src/pysme/smelib/_smelib.cpp b/src/pysme/smelib/_smelib.cpp index 68b54b18..c34a3134 100644 --- a/src/pysme/smelib/_smelib.cpp +++ b/src/pysme/smelib/_smelib.cpp @@ -163,6 +163,105 @@ static PyObject *smelib_ClearH2broad(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static char smelib_SetLineInfoMode_docstring[] = "Set handling mode for precomputed line info"; +static PyObject *smelib_SetLineInfoMode(PyObject *self, PyObject *args) +{ + const int n = 1; + const char *result = NULL; + void *args_c[n]; + int mode = 0; + + if (!PyArg_ParseTuple(args, "i", &mode)) + return NULL; + + args_c[0] = &mode; + result = SetLineInfoMode(n, args_c); + if (result != NULL && result[0] != OK_response) + { + PyErr_SetString(PyExc_RuntimeError, result); + return NULL; + } + + Py_RETURN_NONE; +} + +static char smelib_InputLinePrecomputedInfo_docstring[] = "Input precomputed line ranges and strong mask"; +static PyObject *smelib_InputLinePrecomputedInfo(PyObject *self, PyObject *args) +{ + const char *result = NULL; + PyObject *range_s_obj = NULL, *range_e_obj = NULL, *strong_obj = NULL, *depth_obj = NULL; + PyArrayObject *range_s_arr = NULL, *range_e_arr = NULL, *strong_arr = NULL, *depth_arr = NULL; + void *args_c[5]; + int n = 4; + int nlines = 0; + + if (!PyArg_ParseTuple(args, "OOO|O", &range_s_obj, &range_e_obj, &strong_obj, &depth_obj)) + return NULL; + + range_s_arr = (PyArrayObject *)PyArray_FROM_OTF(range_s_obj, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); + range_e_arr = (PyArrayObject *)PyArray_FROM_OTF(range_e_obj, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); + strong_arr = (PyArrayObject *)PyArray_FROM_OTF(strong_obj, NPY_UBYTE, NPY_ARRAY_IN_ARRAY); + if (range_s_arr == NULL || range_e_arr == NULL || strong_arr == NULL) + goto fail; + + if (PyArray_NDIM(range_s_arr) != 1 || PyArray_NDIM(range_e_arr) != 1 || PyArray_NDIM(strong_arr) != 1) + { + PyErr_SetString(PyExc_ValueError, "Expected 1D arrays for range_s, range_e, and strong_mask"); + goto fail; + } + + nlines = (int)PyArray_DIM(range_s_arr, 0); + if ((int)PyArray_DIM(range_e_arr, 0) != nlines || (int)PyArray_DIM(strong_arr, 0) != nlines) + { + PyErr_SetString(PyExc_ValueError, "Expected range_s, range_e, and strong_mask to have same length"); + goto fail; + } + + args_c[0] = &nlines; + args_c[1] = PyArray_DATA(range_s_arr); + args_c[2] = PyArray_DATA(range_e_arr); + args_c[3] = PyArray_DATA(strong_arr); + + if (depth_obj != NULL && depth_obj != Py_None) + { + depth_arr = (PyArrayObject *)PyArray_FROM_OTF(depth_obj, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); + if (depth_arr == NULL) + goto fail; + if (PyArray_NDIM(depth_arr) != 1) + { + PyErr_SetString(PyExc_ValueError, "Expected 1D array for central_depth"); + goto fail; + } + if ((int)PyArray_DIM(depth_arr, 0) != nlines) + { + PyErr_SetString(PyExc_ValueError, "Expected central_depth to have same length as line ranges"); + goto fail; + } + args_c[4] = PyArray_DATA(depth_arr); + n = 5; + } + + result = InputLinePrecomputedInfo(n, args_c); + if (result != NULL && result[0] != OK_response) + { + PyErr_SetString(PyExc_RuntimeError, result); + goto fail; + } + + Py_XDECREF(range_s_arr); + Py_XDECREF(range_e_arr); + Py_XDECREF(strong_arr); + Py_XDECREF(depth_arr); + Py_RETURN_NONE; + +fail: + Py_XDECREF(range_s_arr); + Py_XDECREF(range_e_arr); + Py_XDECREF(strong_arr); + Py_XDECREF(depth_arr); + return NULL; +} + static char smelib_InputLineList_docstring[] = "Read in line list"; static PyObject *smelib_InputLineList(PyObject *self, PyObject *args) { @@ -1413,6 +1512,8 @@ static PyMethodDef module_methods[] = { {"SetVWscale", smelib_SetVWscale, METH_VARARGS, smelib_SetVWscale_docstring}, {"SetH2broad", smelib_SetH2broad, METH_NOARGS, smelib_SetH2broad_docstring}, {"ClearH2broad", smelib_ClearH2broad, METH_NOARGS, smelib_ClearH2broad_docstring}, + {"SetLineInfoMode", smelib_SetLineInfoMode, METH_VARARGS, smelib_SetLineInfoMode_docstring}, + {"InputLinePrecomputedInfo", smelib_InputLinePrecomputedInfo, METH_VARARGS, smelib_InputLinePrecomputedInfo_docstring}, {"InputLineList", smelib_InputLineList, METH_VARARGS, smelib_InputLineList_docstring}, {"OutputLineList", smelib_OutputLineList, METH_NOARGS, smelib_OutputLineList_docstring}, {"UpdateLineList", smelib_UpdateLineList, METH_VARARGS, smelib_UpdateLineList_docstring}, diff --git a/src/pysme/smelib/sme_synth_faster.h b/src/pysme/smelib/sme_synth_faster.h index 82119627..500f2ebd 100644 --- a/src/pysme/smelib/sme_synth_faster.h +++ b/src/pysme/smelib/sme_synth_faster.h @@ -47,6 +47,8 @@ extern "C" const char *SME_DLL InputWaveRange(int n, void *arg[]); /* Read in extern "C" const char *SME_DLL SetVWscale(int n, void *arg[]); /* Set van der Waals scaling factor */ extern "C" const char *SME_DLL SetH2broad(int n, void *arg[]); /* Set flag for H2 molecule */ extern "C" const char *SME_DLL ClearH2broad(int n, void *arg[]); /* Clear flag for H2 molecule */ +extern "C" const char *SME_DLL SetLineInfoMode(int n, void *arg[]); /* Set handling mode for precomputed line info */ +extern "C" const char *SME_DLL InputLinePrecomputedInfo(int n, void *arg[]); /* Input precomputed line ranges/strong mask */ extern "C" const char *SME_DLL InputLineList(int n, void *arg[]); /* Read in line list */ extern "C" const char *SME_DLL OutputLineList(int n, void *arg[]); /* Return line list */ extern "C" const char *SME_DLL UpdateLineList(int n, void *arg[]); /* Change line list parameters */ @@ -67,4 +69,4 @@ extern "C" const char *SME_DLL Transf(int n, void *arg[]); / extern "C" const char *SME_DLL CentralDepth(int n, void *arg[]); /* Computes line central depths */ extern "C" const char *SME_DLL GetLineOpacity(int n, void *arg[]); /* Returns specific line opacity */ extern "C" const char *SME_DLL GetLineRange(int n, void *arg[]); /* Get validity range for every line */ -extern "C" const char *SME_DLL Contribution_functions(int n, void *arg[]); /* Get contribution functions */ \ No newline at end of file +extern "C" const char *SME_DLL Contribution_functions(int n, void *arg[]); /* Get contribution functions */ diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index 360646f2..1f557aa4 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -606,7 +606,8 @@ def synthesize_spectrum( cdr_create=False, keep_line_opacity=False, vbroad_expend_ratio=2, - contribution_function=False + contribution_function=False, + smelib_lineinfo_mode=0, ): """ Calculate the synthetic spectrum based on the parameters passed in the SME structure @@ -691,6 +692,7 @@ def synthesize_spectrum( wave = [w for w in sme.wave] dll = self.get_dll(dll_id) + dll.SetLineInfoMode(int(smelib_lineinfo_mode)) # Calculate the line central depth and line range if necessary if linelist_mode == 'auto': @@ -702,17 +704,65 @@ def synthesize_spectrum( # Input Model data to C library dll.SetLibraryPath() if passLineList: + linelist_for_smelib = sme.linelist if linelist_mode == 'auto': line_indices = sme.linelist['wlcent'] < 0 v_broad = np.sqrt(sme.vmac**2 + sme.vsini**2 + (clight/sme.ipres)**2) for i in range(sme.nseg): line_indices |= (sme.linelist['line_range_e'] > sme.wran[i][0] * (1 - vbroad_expend_ratio*v_broad/clight)) & (sme.linelist['line_range_s'] < sme.wran[i][1] * (1 + vbroad_expend_ratio*v_broad/clight)) - line_indices &= self.flag_strong_lines_by_bins(sme.linelist['wlcent'], sme.linelist['central_depth']) + line_indices &= self.flag_strong_lines_by_bins( + sme.linelist['wlcent'], + sme.linelist['central_depth'], + threshold=sme.cdr_depth_thres, + ) sme.linelist._lines['use_indices'] = line_indices - line_ion_mask = dll.InputLineList(sme.linelist[line_indices]) - else: - line_ion_mask = dll.InputLineList(sme.linelist) + linelist_for_smelib = sme.linelist[line_indices] + line_ion_mask = dll.InputLineList(linelist_for_smelib) sme.line_ion_mask = line_ion_mask + + if smelib_lineinfo_mode in (1, 2): + cols = set(linelist_for_smelib._lines.columns) + required_cols = {"line_range_s", "line_range_e"} + missing_cols = sorted(required_cols - cols) + + # Build strong mask from existing column or central depth. + if "strong" in cols: + strong_all = np.asarray(linelist_for_smelib["strong"], dtype=np.uint8) + elif "central_depth" in cols: + strong_all = np.asarray( + self.flag_strong_lines_by_bins( + linelist_for_smelib["wlcent"], + linelist_for_smelib["central_depth"], + threshold=sme.cdr_depth_thres, + ), + dtype=np.uint8, + ) + else: + strong_all = None + + if strong_all is None: + missing_cols.append("strong/central_depth") + + if missing_cols: + msg = ( + f"SMElib lineinfo mode={smelib_lineinfo_mode} requested but missing " + f"precomputed columns: {', '.join(missing_cols)}" + ) + if smelib_lineinfo_mode == 2: + raise ValueError(msg) + logger.warning("%s. Falling back to mode 0.", msg) + dll.SetLineInfoMode(0) + else: + keep_mask = ~np.asarray(line_ion_mask, dtype=bool) + range_s = np.asarray(linelist_for_smelib["line_range_s"], dtype=np.float64)[keep_mask] + range_e = np.asarray(linelist_for_smelib["line_range_e"], dtype=np.float64)[keep_mask] + strong_mask = np.asarray(strong_all, dtype=np.uint8)[keep_mask] + + if "central_depth" in cols: + depth = np.asarray(linelist_for_smelib["central_depth"], dtype=np.float64)[keep_mask] + dll.InputLinePrecomputedInfo(range_s, range_e, strong_mask, depth) + else: + dll.InputLinePrecomputedInfo(range_s, range_e, strong_mask) if hasattr(updateLineList, "__len__") and len(updateLineList) > 0: # TODO Currently Updates the whole linelist, could be improved to only change affected lines dll.UpdateLineList(sme.atomic, sme.species, updateLineList) From 70bb573a6eb1de2240e451352b061a58908d2cae Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Wed, 11 Feb 2026 02:45:33 +0900 Subject: [PATCH 08/20] (solve) add switch for line selection --- src/pysme/solve.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/pysme/solve.py b/src/pysme/solve.py index fa791a7a..82804d52 100644 --- a/src/pysme/solve.py +++ b/src/pysme/solve.py @@ -135,7 +135,7 @@ def backup(self, sme): pass def _residuals( - self, param, sme, spec, uncs, mask, segments="all", isJacobian=False, linelist_mode='all', **_ + self, param, sme, spec, uncs, mask, segments="all", isJacobian=False, linelist_mode='all', smelib_lineinfo_mode=0, **_ ): """ Calculates the synthetic spectrum with sme_func and @@ -202,7 +202,8 @@ def _residuals( passLineList=True, updateLineList=self.update_linelist, radial_velocity_mode=radial_velocity_mode, - linelist_mode=linelist_mode + linelist_mode=linelist_mode, + smelib_lineinfo_mode=smelib_lineinfo_mode, ) except AtmosphereError as ae: # Something went wrong (left the grid? Don't go there) @@ -257,6 +258,7 @@ def _jacobian( step_sizes=None, method="2-point", linelist_mode='all', + smelib_lineinfo_mode=0, **_, ): """ @@ -283,7 +285,12 @@ def _jacobian( abs_step=step_sizes, bounds=bounds, args=args, - kwargs={"isJacobian": True, "segments": segments, "linelist_mode": linelist_mode}, + kwargs={ + "isJacobian": True, + "segments": segments, + "linelist_mode": linelist_mode, + "smelib_lineinfo_mode": smelib_lineinfo_mode, + }, ) if not np.all(np.isfinite(g)): @@ -613,7 +620,7 @@ def sanitize_parameter_names(self, sme, param_names): ) return param_names - def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=None, dynamic_param=None, linelist_mode='all'): + def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=None, dynamic_param=None, linelist_mode='all', smelib_lineinfo_mode=0): """ Find the least squares fit parameters to an observed spectrum @@ -767,7 +774,8 @@ def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=N "segments": segments, "step_sizes": step_sizes, "method": sme.leastsquares_jac, - "linelist_mode": linelist_mode + "linelist_mode": linelist_mode, + "smelib_lineinfo_mode": smelib_lineinfo_mode, }, ) # The jacobian is altered by the loss function @@ -793,7 +801,12 @@ def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=N # We could try to reuse the already calculated synthetic spectrum (if it already exists) # However it is much lower resolution then the newly synthethized one (usually) # Therefore the radial velocity wont be as good as when redoing the whole thing - sme = self.synthesizer.synthesize_spectrum(sme, segments, linelist_mode=linelist_mode) + sme = self.synthesizer.synthesize_spectrum( + sme, + segments, + linelist_mode=linelist_mode, + smelib_lineinfo_mode=smelib_lineinfo_mode, + ) else: raise ValueError("No fit parameters given") From a3ed0d776f7d900f54aefd36a72dc70c3d9e9f1b Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Wed, 11 Feb 2026 02:53:03 +0900 Subject: [PATCH 09/20] (synthesize, solve) rename dynamic_param to derived_param --- changelog.md | 10 ++++++++ src/pysme/solve.py | 64 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 changelog.md diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..3a746f3e --- /dev/null +++ b/changelog.md @@ -0,0 +1,10 @@ +# Changelog + +## 2026-02-10 + +- Added `derived_param` as the preferred name for derived-parameter callbacks in `solve()`. +- Kept backward compatibility with `dynamic_param`: + - If `dynamic_param` is used, a `DeprecationWarning` is emitted. + - If both `derived_param` and `dynamic_param` are provided (and differ), `ValueError` is raised. +- Updated internal solver logic and user-facing messages to use the "derived parameter" terminology. +- Added `smelib_lineinfo_mode` passthrough in `solve()` call paths (`_residuals` and `_jacobian`) so fitting runs can use SMElib precomputed line-info modes. diff --git a/src/pysme/solve.py b/src/pysme/solve.py index 82804d52..fde38302 100644 --- a/src/pysme/solve.py +++ b/src/pysme/solve.py @@ -92,6 +92,7 @@ def __init__(self, filename=None, restore=False): self.iteration = 0 self.parameter_names = [] self.update_linelist = False + self.derived_param = None self._latest_residual = None self._latest_jacobian = None self.restore = restore @@ -178,20 +179,20 @@ def _residuals( # change parameters for name, value in zip(self.parameter_names, param): - if self.dynamic_param is not None: - if name in self.dynamic_param.keys(): - raise ValueError(f'fitting parameter {name} cannot be also in dynamic parameter.') + if self.derived_param is not None: + if name in self.derived_param.keys(): + raise ValueError(f"fitting parameter {name} cannot be also in derived parameter.") sme[name] = value - # change dynamic parameters - if self.dynamic_param is not None: - for name in self.dynamic_param.keys(): - if 'abund' in name: + # change derived parameters + if self.derived_param is not None: + for name in self.derived_param.keys(): + if "abund" in name: abund_name = name.split()[1] - sme.abund[abund_name] = self.dynamic_param[name](sme) - sme.monh - print(f'Changing dynamic parameter {name} to {sme.abund[abund_name]:.2f}.') + sme.abund[abund_name] = self.derived_param[name](sme) - sme.monh + print(f"Changing derived parameter {name} to {sme.abund[abund_name]:.2f}.") else: - sme[name] = self.dynamic_param[name](sme) - print(f'Changing dynamic parameter {name} to {sme[name]:.2f}.') + sme[name] = self.derived_param[name](sme) + print(f"Changing derived parameter {name} to {sme[name]:.2f}.") # run spectral synthesis try: result = self.synthesizer.synthesize_spectrum( @@ -620,7 +621,18 @@ def sanitize_parameter_names(self, sme, param_names): ) return param_names - def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=None, dynamic_param=None, linelist_mode='all', smelib_lineinfo_mode=0): + def solve( + self, + sme, + param_names=None, + segments="all", + bounds=None, + step_sizes=None, + derived_param=None, + dynamic_param=None, + linelist_mode="all", + smelib_lineinfo_mode=0, + ): """ Find the least squares fit parameters to an observed spectrum @@ -644,7 +656,15 @@ def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=N assert "wave" in sme, "SME Structure has no wavelength" assert "spec" in sme, "SME Structure has no observation" - self.dynamic_param = dynamic_param + if derived_param is not None and dynamic_param is not None and derived_param is not dynamic_param: + raise ValueError("Specify only one of derived_param or dynamic_param, not both.") + if dynamic_param is not None: + warnings.warn( + "'dynamic_param' is deprecated and will be removed in a future release; use 'derived_param' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.derived_param = derived_param if derived_param is not None else dynamic_param if self.restore and self.filename is not None: fname = self.filename.rsplit(".", 1)[0] @@ -817,7 +837,21 @@ def solve(self, sme, param_names=None, segments="all", bounds=None, step_sizes=N def solve( - sme, param_names=None, segments="all", filename=None, restore=False, **kwargs + sme, + param_names=None, + segments="all", + filename=None, + restore=False, + derived_param=None, + dynamic_param=None, + **kwargs, ): solver = SME_Solver(filename=filename, restore=restore) - return solver.solve(sme, param_names, segments, **kwargs) + return solver.solve( + sme, + param_names, + segments, + derived_param=derived_param, + dynamic_param=dynamic_param, + **kwargs, + ) From 6be17f751c625d81ef070e9d17baf84710857952 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 19:28:11 +0900 Subject: [PATCH 10/20] (synthesize, solve) update linelist_mode naming --- changelog.md | 3 +++ src/pysme/solve.py | 33 ++++++++++++++++++++++++++++++++- src/pysme/synthesize.py | 22 +++++++++++++++++----- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/changelog.md b/changelog.md index 3a746f3e..f26f073c 100644 --- a/changelog.md +++ b/changelog.md @@ -8,3 +8,6 @@ - If both `derived_param` and `dynamic_param` are provided (and differ), `ValueError` is raised. - Updated internal solver logic and user-facing messages to use the "derived parameter" terminology. - Added `smelib_lineinfo_mode` passthrough in `solve()` call paths (`_residuals` and `_jacobian`) so fitting runs can use SMElib precomputed line-info modes. +- Updated `linelist_mode` naming: + - Preferred values are now `"all"` and `"dynamic"`. + - `"auto"` is kept as a deprecated compatibility alias and maps to `"dynamic"` with a `DeprecationWarning`. diff --git a/src/pysme/solve.py b/src/pysme/solve.py index fde38302..327181bb 100644 --- a/src/pysme/solve.py +++ b/src/pysme/solve.py @@ -136,7 +136,20 @@ def backup(self, sme): pass def _residuals( - self, param, sme, spec, uncs, mask, segments="all", isJacobian=False, linelist_mode='all', smelib_lineinfo_mode=0, **_ + self, + param, + sme, + spec, + uncs, + mask, + segments="all", + isJacobian=False, + linelist_mode="all", + smelib_lineinfo_mode=0, + cdr_database=None, + cdr_create=False, + vbroad_expend_ratio=2, + **_, ): """ Calculates the synthetic spectrum with sme_func and @@ -205,6 +218,9 @@ def _residuals( radial_velocity_mode=radial_velocity_mode, linelist_mode=linelist_mode, smelib_lineinfo_mode=smelib_lineinfo_mode, + cdr_database=cdr_database, + cdr_create=cdr_create, + vbroad_expend_ratio=vbroad_expend_ratio, ) except AtmosphereError as ae: # Something went wrong (left the grid? Don't go there) @@ -260,6 +276,9 @@ def _jacobian( method="2-point", linelist_mode='all', smelib_lineinfo_mode=0, + cdr_database=None, + cdr_create=False, + vbroad_expend_ratio=2, **_, ): """ @@ -291,6 +310,9 @@ def _jacobian( "segments": segments, "linelist_mode": linelist_mode, "smelib_lineinfo_mode": smelib_lineinfo_mode, + "cdr_database": cdr_database, + "cdr_create": cdr_create, + "vbroad_expend_ratio": vbroad_expend_ratio, }, ) @@ -632,6 +654,9 @@ def solve( dynamic_param=None, linelist_mode="all", smelib_lineinfo_mode=0, + cdr_database=None, + cdr_create=False, + vbroad_expend_ratio=2, ): """ Find the least squares fit parameters to an observed spectrum @@ -796,6 +821,9 @@ def solve( "method": sme.leastsquares_jac, "linelist_mode": linelist_mode, "smelib_lineinfo_mode": smelib_lineinfo_mode, + "cdr_database": cdr_database, + "cdr_create": cdr_create, + "vbroad_expend_ratio": vbroad_expend_ratio, }, ) # The jacobian is altered by the loss function @@ -826,6 +854,9 @@ def solve( segments, linelist_mode=linelist_mode, smelib_lineinfo_mode=smelib_lineinfo_mode, + cdr_database=cdr_database, + cdr_create=cdr_create, + vbroad_expend_ratio=vbroad_expend_ratio, ) else: raise ValueError("No fit parameters given") diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index 1f557aa4..a6b62b0f 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -4,6 +4,7 @@ """ import logging import uuid +import warnings import numpy as np from scipy.constants import speed_of_light @@ -694,8 +695,19 @@ def synthesize_spectrum( dll = self.get_dll(dll_id) dll.SetLineInfoMode(int(smelib_lineinfo_mode)) + # "dynamic" is the preferred name in publications; keep "auto" as compatibility alias. + if linelist_mode == "auto": + warnings.warn( + "'linelist_mode=\"auto\"' is deprecated; use 'linelist_mode=\"dynamic\"' instead.", + DeprecationWarning, + stacklevel=2, + ) + linelist_mode = "dynamic" + elif linelist_mode not in ("all", "dynamic"): + raise ValueError("linelist_mode must be one of: 'all', 'dynamic'") + # Calculate the line central depth and line range if necessary - if linelist_mode == 'auto': + if linelist_mode == 'dynamic': # logger.info(f'linelist mode: {linelist_mode}') if sme.linelist.cdr_paras is None or not {'central_depth', 'line_range_s', 'line_range_e'}.issubset(sme.linelist._lines.columns) or np.abs(sme.linelist.cdr_paras[0]-sme.teff) >= sme.linelist.cdr_paras_thres['teff'] or (np.abs(sme.linelist.cdr_paras[1]-sme.logg) >= sme.linelist.cdr_paras_thres['logg']) or (np.abs(sme.linelist.cdr_paras[2]-sme.monh) >= sme.linelist.cdr_paras_thres['monh']) or cdr_create: logger.info(f'Updating linelist central depth and line range.') @@ -705,7 +717,7 @@ def synthesize_spectrum( dll.SetLibraryPath() if passLineList: linelist_for_smelib = sme.linelist - if linelist_mode == 'auto': + if linelist_mode == 'dynamic': line_indices = sme.linelist['wlcent'] < 0 v_broad = np.sqrt(sme.vmac**2 + sme.vsini**2 + (clight/sme.ipres)**2) for i in range(sme.nseg): @@ -881,7 +893,7 @@ def synthesize_spectrum( sme.vrad = np.asarray(vrad) sme.vrad_unc = np.asarray(vrad_unc) nlte_flags = dll.GetNLTEflags() - if linelist_mode == 'auto': + if linelist_mode == 'dynamic': sme.linelist._lines.loc[sme.linelist._lines['use_indices'], 'nlte_flag'] = nlte_flags.astype(int) else: sme.nlte.flags = nlte_flags @@ -979,8 +991,8 @@ def synthesize_segment( dll.Opacity() # Reuse adaptive wavelength grid in the jacobians - if reuse_wavelength_grid and segment in self.wint.keys(): - wint_seg = self.wint[segment] + if reuse_wavelength_grid: #and segment in self.wint.keys(): + wint_seg = sme.wint[segment] else: wint_seg = None From af1709633608ea8b3c6c017cef2f1ae9bf5bdde7 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 19:41:20 +0900 Subject: [PATCH 11/20] make the helpstring and doc of abund consistent --- docs/usage/abundance.md | 6 +++--- src/pysme/abund.py | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/usage/abundance.md b/docs/usage/abundance.md index 4bd86f97..77198a75 100644 --- a/docs/usage/abundance.md +++ b/docs/usage/abundance.md @@ -58,7 +58,7 @@ values of H, He, and Li are approximately 3.16e4, 2.69e3, and ## Solar metallicity -PySME contains three pre defined sets of solar abundances, +PySME contains multiple pre defined sets of solar abundances for you to choose from. They are: From solar photosphere: @@ -66,7 +66,7 @@ From solar photosphere: - `grevesse1996`: [Grevesse, Noels & Sauval (1996, ASPC)](https://ui.adsabs.harvard.edu/abs/1996ASPC...99..117G) - `grevesse1998`: [Grevesse, & Sauval (1998, SSRv)](https://ui.adsabs.harvard.edu/abs/1998SSRv...85..161G) - `asplund2005`: [Asplund, Grevesse & Sauval (2005, ASPC)](https://ui.adsabs.harvard.edu/abs/2005ASPC..336...25A) -- `grevesse2007`: [Grevesse, Asplund & Sauval (2007, SSRv)](https://ui.adsabs.harvard.edu/abs/2007SSRv..130..105G) +- `grevesse2007` (alias: `solar`): [Grevesse, Asplund & Sauval (2007, SSRv)](https://ui.adsabs.harvard.edu/abs/2007SSRv..130..105G) - `asplund2009`: [Asplund, Grevesse & Sauval (2009, ARA&A)](https://ui.adsabs.harvard.edu/abs/2009ARA&A..47..481A) - `asplund2021`: [Asplund, Amarsi & Grevesse (2021, A&A)](https://ui.adsabs.harvard.edu/abs/2021A&A...653A.141A) @@ -116,4 +116,4 @@ thus - $K_\mathrm{H} = \left(1 + \sum_\mathrm{X}10^{H_\mathrm{X}-12} \right)^{-1}$ - $K_\mathrm{He} = \left(10^{12-H_\mathrm{He}} + 1 + 10^{12-H_\mathrm{He}}\times\sum_\mathrm{X}10^{H_\mathrm{X}-12} \right)^{-1}$ -- $K_\mathrm{X} = H_\mathrm{X}-12-\log{(1+10^{H_\mathrm{He}-12})}$ \ No newline at end of file +- $K_\mathrm{X} = H_\mathrm{X}-12-\log{(1+10^{H_\mathrm{He}-12})}$ diff --git a/src/pysme/abund.py b/src/pysme/abund.py index fa297234..c6f937d7 100644 --- a/src/pysme/abund.py +++ b/src/pysme/abund.py @@ -678,8 +678,10 @@ def set_pattern_by_name(self, pattern_name): Parameters ---------- pattern_name : str - Name of the predefined option to use. One of 'asplund2009', 'grevesse2007', - 'lodders2003', 'empty' + Name of the predefined option to use. One of: + 'grevesse2007', 'asplund2009', 'asplund2021', 'asplund2005', + 'lodders2003', 'anders1989', 'grevesse1996', 'grevesse1998', ,'lodders2010', + 'empty' Raises ------ @@ -719,8 +721,10 @@ def set_pattern_by_name(self, pattern_name): self._pattern = self.empty_pattern() else: raise ValueError( - f"Got abundance pattern name {pattern_name} should be one of" - "'asplund2009', 'asplund2021', 'grevesse2007', 'lodders2003', or 'empty'." + f"Got abundance pattern name {pattern_name}. It should be one of: " + "'grevesse2007' (or 'solar'), 'asplund2009', 'asplund2021', " + "'asplund2005', 'lodders2003', 'lodders2010', 'anders1989', " + "'grevesse1996', 'grevesse1998', or 'empty'." ) def set_pattern_by_value(self, pattern, type): @@ -867,6 +871,6 @@ def _load_v1(file, names, folder=""): @staticmethod def solar(): - """Return solar abundances of asplund 2009""" + """Return solar abundances of Grevesse 2007""" solar = Abund(pattern="solar", monh=0) return solar From 40a4cd2f604e798b8bb7b2807c7641b902089fa6 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 19:59:30 +0900 Subject: [PATCH 12/20] doc modification --- docs/usage/changes.rst | 3 +-- docs/usage/faq.md | 2 +- docs/usage/installation.md | 4 ---- docs/usage/quickstart.md | 5 +++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/usage/changes.rst b/docs/usage/changes.rst index 0ea7a288..e9e5e84a 100644 --- a/docs/usage/changes.rst +++ b/docs/usage/changes.rst @@ -36,8 +36,7 @@ SME structure: Abundance: * Python Class object - * set of three default solar abundances available - ("asplund2009", "grevesse2007", "lodders2003") + * set of multiple solar abundances available * can output abundances in different formats ('sme', 'n/nTot', 'n/nH', and 'H=12') * internal format is 'H=12', i.e. log(X/H) + 12 diff --git a/docs/usage/faq.md b/docs/usage/faq.md index 58213afb..61c32de3 100644 --- a/docs/usage/faq.md +++ b/docs/usage/faq.md @@ -6,7 +6,7 @@ Call `util.start_logging(filename)`. ```py -from SME import util +from pysme import util util.start_logging("your_log_file.log") ``` diff --git a/docs/usage/installation.md b/docs/usage/installation.md index b6cb6275..82715657 100644 --- a/docs/usage/installation.md +++ b/docs/usage/installation.md @@ -18,10 +18,6 @@ Currently PySME is tested with Python verion 3.9-3.13. - The files (mainly atmosphere models and NLTE departure coefficnent grids) required by PySME will be saved inside `~/.sme/`. These files can be large thus if your home directory is small, we recommend to create a softlink for `~/.sme`. ``` -```{warning} -PySME requires the pre-compled C++/Fortran SME library to run. Currently we deliver SME library with Linux and Mac version; for Windows users, we recommend to use WSL and hence the Linux version. -``` - ## Running SME - An simple minimum example is provided in the [examples directory](https://github.com/MingjieJian/SME/tree/master/examples). Make sure to also download the provided input structure. - You can then run it with: `python minimum.py` diff --git a/docs/usage/quickstart.md b/docs/usage/quickstart.md index 094b4d58..1e30e451 100644 --- a/docs/usage/quickstart.md +++ b/docs/usage/quickstart.md @@ -32,6 +32,7 @@ sme.linelist = vald ``` * Wavelength grid or wavelength range ```py +import numpy as np sme.wave = [np.arange(6436, 6440, 0.1), np.arange(6442, 6443, 0.1)] # Or sme.wran = [[6436, 6440], [6442, 6443]] @@ -60,7 +61,7 @@ They can be inserted into the SME structure with: sme.wave = wave sme.spec = flux sme.uncs = uncertainties -sme.mask = np.ones(len(Spectrum), dtype=int) +sme.mask = np.ones(len(wave), dtype=int) ``` - The wavelength is always given in Angstrom. @@ -72,7 +73,7 @@ sme.mask = np.ones(len(Spectrum), dtype=int) Then the `solve` function can be used to find the best fit solution: ```py -from sme.solve import solve +from pysme.solve import solve # for more details on the fitparameter option, see fitparameters fitparameters = ["teff", "logg", "monh", "abund Mg"] sme = solve(sme, fitparameters) From f349f9f5837568bc1f97c7e58c8b2b1f0394051d Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 21:41:08 +0900 Subject: [PATCH 13/20] (synthesize) restore wint_seg line --- src/pysme/synthesize.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index a6b62b0f..a0dc316d 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -991,8 +991,8 @@ def synthesize_segment( dll.Opacity() # Reuse adaptive wavelength grid in the jacobians - if reuse_wavelength_grid: #and segment in self.wint.keys(): - wint_seg = sme.wint[segment] + if reuse_wavelength_grid and segment in self.wint.keys(): + wint_seg = self.wint[segment] else: wint_seg = None From 17583e972077d795958c6aedea71ee94a440ddde Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 23:40:32 +0900 Subject: [PATCH 14/20] (synthesize) add sme.wint as optional input --- src/pysme/sme.py | 2 + src/pysme/synthesize.py | 20 ++++++++-- test/test_sme_structure.py | 25 ++++++++++++ test/test_synthesis.py | 82 +++++++++++++++++++++++++++++++++++++- 4 files changed, 125 insertions(+), 4 deletions(-) diff --git a/src/pysme/sme.py b/src/pysme/sme.py index 79e502a5..801b8fea 100644 --- a/src/pysme/sme.py +++ b/src/pysme/sme.py @@ -252,6 +252,8 @@ class SME_Structure(Parameters): """), ("wran", None, this, this, "array of size (nseg, 2): beginning and end wavelength points of each segment"), + ("wint", None, vector, this, + "Iliffe_vector of shape (nseg, ...): optional wavelength grid passed to SMElib Transf"), ("wave", None, vector, this, "Iliffe_vector of shape (nseg, ...): wavelength"), ("spec", None, vector, this, diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index a0dc316d..fa4605db 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -990,8 +990,22 @@ def synthesize_segment( dll.InputWaveRange(wbeg-2, wend+2) dll.Opacity() - # Reuse adaptive wavelength grid in the jacobians - if reuse_wavelength_grid and segment in self.wint.keys(): + # Priority for wavelength grid passed to SMElib: + # 1) user-provided sme.wint for this segment + # 2) internal cache when reuse_wavelength_grid=True + # 3) None (let SMElib compute it) + user_wint_seg = None + if getattr(sme, "wint", None) is not None: + try: + user_wint_seg = sme.wint[segment] + if user_wint_seg is not None and len(user_wint_seg) == 0: + user_wint_seg = None + except (IndexError, KeyError, TypeError): + user_wint_seg = None + + if user_wint_seg is not None: + wint_seg = np.asarray(user_wint_seg, dtype=np.float64) + elif reuse_wavelength_grid and segment in self.wint: wint_seg = self.wint[segment] else: wint_seg = None @@ -1019,7 +1033,7 @@ def synthesize_segment( # Store the adaptive wavelength grid for the future # if it was newly created - if wint_seg is None: + if user_wint_seg is None and wint_seg is None: self.wint[segment] = wint if not sme.specific_intensities_only: diff --git a/test/test_sme_structure.py b/test/test_sme_structure.py index 5b896c7f..536dac6b 100644 --- a/test/test_sme_structure.py +++ b/test/test_sme_structure.py @@ -5,6 +5,7 @@ import numpy as np import pytest +from pysme.iliffe_vector import Iliffe_vector from pysme.sme import SME_Structure as SME_Struct @@ -140,3 +141,27 @@ def test_fitresults(): sme.fitresults.chisq = 100 sme.fitresults.clear() assert sme.fitresults.chisq is None + + +def test_wint_single_segment_array_input(): + sme = SME_Struct() + wint = np.linspace(5000.0, 5001.0, 11) + + sme.wint = wint + + assert isinstance(sme.wint, Iliffe_vector) + assert sme.wint.nseg == 1 + assert np.allclose(sme.wint[0], wint) + + +def test_wint_multi_segment_list_input(): + sme = SME_Struct() + wint0 = np.linspace(5000.0, 5001.0, 5) + wint1 = np.linspace(6000.0, 6002.0, 7) + + sme.wint = [wint0, wint1] + + assert isinstance(sme.wint, Iliffe_vector) + assert sme.wint.nseg == 2 + assert np.allclose(sme.wint[0], wint0) + assert np.allclose(sme.wint[1], wint1) diff --git a/test/test_synthesis.py b/test/test_synthesis.py index 66695ac9..468ddb5a 100644 --- a/test/test_synthesis.py +++ b/test/test_synthesis.py @@ -4,7 +4,8 @@ import pytest from pysme.iliffe_vector import Iliffe_vector -from pysme.synthesize import synthesize_spectrum +from pysme.sme import SME_Structure as SME_Struct +from pysme.synthesize import Synthesizer, synthesize_spectrum def test_synthesis_simple(sme_2segments): @@ -50,3 +51,82 @@ def test_synthesis_segment(sme_2segments): assert sme2.wave.shape[1][1] != 0 assert np.all(sme2.synth[0] == orig) + + +class _DummyDLL: + def __init__(self): + self.last_wave = "unset" + + def InputWaveRange(self, *_): + return None + + def Opacity(self): + return None + + def Transf(self, mu, accrt, accwi, keep_lineop, wave=None): + self.last_wave = wave + if wave is None: + wint = np.linspace(5000.0, 5001.0, 5) + else: + wint = np.asarray(wave, dtype=float) + sint = np.ones((len(mu), len(wint)), dtype=float) + cint = np.ones((len(mu), len(wint)), dtype=float) + return len(wint), wint, sint, cint + + def CentralDepth(self, mu, accrt): + return np.zeros(0, dtype=float) + + def GetLineRange(self): + return np.zeros((0, 2), dtype=float) + + +def _minimal_sme(): + sme = SME_Struct() + sme.wran = [[5000.0, 5001.0]] + sme.vsini = 0.0 + sme.vmac = 0.0 + sme.vrad_flag = "none" + sme.specific_intensities_only = True + sme.normalize_by_continuum = True + return sme + + +def test_synthesize_segment_prefers_user_wint_over_cache(): + dll = _DummyDLL() + synth = Synthesizer(dll=dll) + sme = _minimal_sme() + + user_wint = np.linspace(5000.0, 5001.0, 7) + cached_wint = np.linspace(5000.0, 5001.0, 9) + sme.wint = user_wint + synth.wint[0] = cached_wint.copy() + + synth.synthesize_segment(sme, 0, reuse_wavelength_grid=True) + + assert np.allclose(dll.last_wave, user_wint) + assert np.allclose(synth.wint[0], cached_wint) + + +def test_synthesize_segment_uses_cache_when_user_wint_missing(): + dll = _DummyDLL() + synth = Synthesizer(dll=dll) + sme = _minimal_sme() + + cached_wint = np.linspace(5000.0, 5001.0, 9) + synth.wint[0] = cached_wint + + synth.synthesize_segment(sme, 0, reuse_wavelength_grid=True) + + assert np.allclose(dll.last_wave, cached_wint) + + +def test_synthesize_segment_populates_cache_when_no_wint_available(): + dll = _DummyDLL() + synth = Synthesizer(dll=dll) + sme = _minimal_sme() + + synth.synthesize_segment(sme, 0, reuse_wavelength_grid=True) + + assert dll.last_wave is None + assert 0 in synth.wint + assert np.allclose(synth.wint[0], np.linspace(5000.0, 5001.0, 5)) From 1104c9b38d05f8501ebe0ba03fe9a8f38d9cb797 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Sun, 15 Feb 2026 23:46:51 +0900 Subject: [PATCH 15/20] (doc) add wint to doc --- changelog.md | 3 +++ docs/index.rst | 2 +- docs/usage/changelog.md | 5 ++++- docs/usage/how-to.md | 13 ++++++++----- docs/usage/quickstart.md | 9 +++++++++ docs/usage/sme_struct.md | 14 ++++++++++++-- 6 files changed, 37 insertions(+), 9 deletions(-) diff --git a/changelog.md b/changelog.md index f26f073c..d997f01c 100644 --- a/changelog.md +++ b/changelog.md @@ -11,3 +11,6 @@ - Updated `linelist_mode` naming: - Preferred values are now `"all"` and `"dynamic"`. - `"auto"` is kept as a deprecated compatibility alias and maps to `"dynamic"` with a `DeprecationWarning`. +- Added segment-aware optional input `sme.wint` for synthesis transfer grids. + - Priority is now `sme.wint[segment]` first, then internal cached grids (when enabled), then SMElib adaptive grid generation. +- Updated user docs accordingly (`sme_struct`, `quickstart`, and `how-to`). diff --git a/docs/index.rst b/docs/index.rst index 4f24a6dd..d7d3a8bd 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -11,7 +11,7 @@ PySME is its modern Python front-end: a wrapper around the original C++/Fortran * Plane-parallel and spherical radiative-transfer engine * LTE & 1-D NLTE line formation with pre-computed grids * Automatic :math:`\chi^2` fitting for :math:`T_\mathrm{eff}`, :math:`\log{g}`, :math:`v_\mathrm{mic}`, [X/Fe] … - * Seamless use of ATLAS, MARCS, Phoenix and PINN model atmospheres and VALD line lists + * Seamless use of ATLAS and MARCS model atmospheres and VALD line lists .. note:: diff --git a/docs/usage/changelog.md b/docs/usage/changelog.md index 018a27f1..b830fe70 100644 --- a/docs/usage/changelog.md +++ b/docs/usage/changelog.md @@ -5,6 +5,9 @@ This page stores the change log for pysme since May 2024. ## In-development - (model) modify the atmosphere geometry to '' for auto desicion instead of 'PP'. +- (sme structure) add `sme.wint` as a segment-aware optional transfer grid input for synthesis. +- (synthesize) when `sme.wint` is provided, synthesis now prefers user-provided `wint` over internal cached wavelength grids. +- (docs) update long-spectrum examples to prefer `linelist_mode='dynamic'` (keep `auto` as deprecated compatibility alias). ## In github-repo @@ -42,4 +45,4 @@ This page stores the change log for pysme since May 2024. - Add line depth result to sme_structure. - Add line range result to sme_structure. - Support python 3.12. -- Support new VALD3 line format. \ No newline at end of file +- Support new VALD3 line format. diff --git a/docs/usage/how-to.md b/docs/usage/how-to.md index f5214779..f0a371d2 100644 --- a/docs/usage/how-to.md +++ b/docs/usage/how-to.md @@ -245,7 +245,7 @@ The synthesis of long spectra, i.e., a spectra covering a wide wavelength range The deafult synthesis mode of PySME takes all the lines in the `linelist` into account to synthesize the spectra, thus the synthesis takes a long time. To make it even worse, the synthesis is repeated for each segment, thus if we have 10 segment covering from 3000-9000AA, all the lines (including those in ~9000AA) will be used for the first segment (3000-3600AA), and the total time cost is 10 times longer than just using one segment to cover the whole range. -This situation can be improved by using the central depth and line range parameters to select the relevant lines for each segment, by simply adding `linelist_mode='auto'` in `synthesize_spectrum`: +This situation can be improved by using the central depth and line range parameters to select the relevant lines for each segment, by simply adding `linelist_mode='dynamic'` in `synthesize_spectrum`: ```py from pysme.synthesize import synthesize_spectrum @@ -256,10 +256,13 @@ sme.wave = np.arange(3000, 6000, 0.02).reshape(-1, 100) sme.linelist = line_list sme.nlte.set_nlte('Na') sme.cdr_depth_thres = 0.1 -sme = synthesize_spectrum(sme, linelist_mode='auto') +sme = synthesize_spectrum(sme, linelist_mode='dynamic') ``` -The detailed explanaiton of what `linelist_mode='auto'` triggers is as follow: +`linelist_mode='auto'` is still accepted as a deprecated compatibility alias +and maps to `linelist_mode='dynamic'`. + +The detailed explanaiton of what `linelist_mode='dynamic'` triggers is as follow: 1. If the `sme.linelist.cdr_paras` is None (means `update_cdr` hasn't run for it), or either the Teff, logg, monh and vmic (optional) in `sme.linelist.cdr_paras` differ from the input parameters by 250K, 0.5, 0.5 or 1 (you can change these parameter in `sme.linelist.cdr_paras_thres` as a dictionary), then run `update_cdr` under current input stellar parameters. 2. Find the beginning and ending wavelength of each segment, wbeg and wend. @@ -289,7 +292,7 @@ sme.spec = obs_flux sme.uncs = obs_flux_err sme.linelist = line_list sme.cdr_depth_thres = 0.1 -sme = solve(sme, linelist_mode='auto') +sme = solve(sme, linelist_mode='dynamic') ``` -It only triggers the `linelist_mode` variable in `synthesize_spectrum`. \ No newline at end of file +It only triggers the `linelist_mode` variable in `synthesize_spectrum`. diff --git a/docs/usage/quickstart.md b/docs/usage/quickstart.md index 1e30e451..fdf2d6fc 100644 --- a/docs/usage/quickstart.md +++ b/docs/usage/quickstart.md @@ -37,6 +37,13 @@ sme.wave = [np.arange(6436, 6440, 0.1), np.arange(6442, 6443, 0.1)] # Or sme.wran = [[6436, 6440], [6442, 6443]] ``` +* Optional: provide the transfer grid used by SMElib +```py +# single segment +sme.wint = np.arange(6436, 6440, 0.02) +# multi-segment +sme.wint = [np.arange(6436, 6440, 0.02), np.arange(6442, 6443, 0.02)] +``` Then use the `synthesize_spectrum` function: ```py @@ -67,6 +74,8 @@ sme.mask = np.ones(len(wave), dtype=int) - The wavelength is always given in Angstrom. - Note that the observation may be split into segments (orders etc). - Then Wavelength is a list of arrays [segment1, segment2, ...], and the same applies to spec, uncs, and mask. +- Segment-aware inputs include: `wave`, `spec`, `uncs`, `mask`, and `wint`. +- Global (non-segmented) inputs include: `vmic`, `vmac`, and `vsini`. - The mask values are: 0: bad pixel, 1: line pixel, 2: continuum pixel, 4: vrad pixel - The masks are additive, i.e., you can set mask value to 5 for line and vrad pixel. - Note that the dtype of sme.mask must be int. diff --git a/docs/usage/sme_struct.md b/docs/usage/sme_struct.md index 5ada7f1a..04228030 100644 --- a/docs/usage/sme_struct.md +++ b/docs/usage/sme_struct.md @@ -74,6 +74,15 @@ from IDL SME. It is recommend however to use the new variables. this if you dont have an observation and dont want to specify the exact wavelength grid of the synthetic observation. Note that this is not an Illiffe vector. +:wint: + Optional wavelength grid passed to SMElib `Transf` as adaptive grid for each segment. + Accepts the same segment-aware input styles as `wave`: + `numpy.ndarray` (single segment), `list` of arrays (multi-segment), + or `Iliffe_vector`. + If provided, `sme.wint[segment]` is used directly for synthesis. + If not provided, PySME can reuse an internal cached adaptive grid + when `reuse_wavelength_grid=True`; otherwise SMElib computes a new + adaptive grid. Abundance @@ -160,7 +169,8 @@ Other Parameters :h2broad: flag determing whether to use H2 broadening or not (usually True) :accrt: Minimum accuracy for synthethized spectrum at wavelength grid - points in sme.wave. Values below 1e-4 are not meaningful + points in `sme.wint` (or SMElib adaptive grid if `sme.wint` is not set). + Values below 1e-4 are not meaningful. :accwi: Minimum accuracy for linear spectrum interpolation vs. wavelength. Values below 1e-4 are not meaningful. @@ -169,4 +179,4 @@ Other Parameters The date and time when this structure or the last synthetic spectrum was created -[^#] They are called Illiffe vectors in the code, and they were that in IDL. But they are technically not Illiffe vectors anymore, but just lists of individal numpy arrays. \ No newline at end of file +[^#] They are called Illiffe vectors in the code, and they were that in IDL. But they are technically not Illiffe vectors anymore, but just lists of individal numpy arrays. From 8472f3ac8e67068743e6fd9ded592250ada5929f Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 16 Feb 2026 00:01:34 +0900 Subject: [PATCH 16/20] (test) modify lfs_test --- docs/index.rst | 2 +- test/test_largefilestorage.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index d7d3a8bd..848e7221 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,7 @@ PySME documentation =================== -More than two decades ago `Valenti & Piskunov (1996) `_ developed SME – Spectroscopy Made Easy, a high-precision stellar-spectra synthesis/analysis engine that has powered hundreds of studies. +More than two decades ago `Valenti & Piskunov (1996) `_ developed SME - Spectroscopy Made Easy, a high-precision stellar-spectra synthesis/analysis engine that has powered hundreds of studies. PySME is its modern Python front-end: a wrapper around the original C++/Fortran core that lets you (1) compute accurate, high-resolution synthetic spectra from a linelist + model atmosphere, (2) invert observed spectra to derive stellar parameters, and (3) explore NLTE corrections — all from an interactive notebook or scripted pipeline. The same capabilities make PySME invaluable for exoplanet work, where characterising the host star is essential for understanding its planets. 🎉 PySME (version 0.6.14+) is now fully compatible with the arm64 MacOS! Feel free to try it out. 🎉 diff --git a/test/test_largefilestorage.py b/test/test_largefilestorage.py index f82f75cc..3078048a 100644 --- a/test/test_largefilestorage.py +++ b/test/test_largefilestorage.py @@ -12,7 +12,7 @@ def lfs_available(): return r.status_code == 200 -skipif_lfs = pytest.mark.skipif(lfs_available(), reason="LFS not available") +skipif_lfs = pytest.mark.skipif(not lfs_available(), reason="LFS not available") @pytest.fixture From cf5cfa1bf23ed3b7d72a376d93ffe46bd262f1ef Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 16 Feb 2026 08:25:09 +0900 Subject: [PATCH 17/20] (doc) strctual upgrade --- .readthedocs.yaml | 3 + docs/_static/custom.css | 52 +++++++ docs/_static/figures/first_spectrum.png | Bin 0 -> 70207 bytes docs/_static/nlte_table.png | Bin 0 -> 355543 bytes docs/advance/derived_param.md | 73 +++++++++ docs/{usage => advance}/faq.md | 0 docs/{usage => advance}/fordev.md | 17 ++- docs/{usage => advance}/how-to.md | 0 docs/advance/index.rst | 14 ++ docs/advance/line_filtering.md | 67 +++++++++ docs/{usage => concepts}/abundance.md | 0 docs/{usage => concepts}/atmosphere.md | 22 ++- docs/concepts/data_files.md | 20 +++ docs/{usage => concepts}/fitparameters.md | 1 + docs/{usage => concepts}/fitresults.md | 3 +- docs/concepts/index.rst | 17 +++ docs/concepts/lfs.md | 6 + docs/concepts/nlte.md | 128 ++++++++++++++++ docs/{usage => concepts}/sme_struct.md | 47 ++---- .../system_info.md} | 11 +- docs/conf.py | 40 ++++- docs/{usage => dev}/changelog.md | 0 docs/{usage => dev}/changes.rst | 0 docs/dev/index.rst | 12 ++ docs/dev/old_docs.md | 4 + docs/fundamentals/abund.md | 69 +++++++++ docs/fundamentals/continuum.md | 12 ++ docs/fundamentals/flux_inten.md | 37 +++++ docs/fundamentals/index.rst | 17 +++ docs/fundamentals/io.md | 10 ++ docs/fundamentals/linelist.md | 142 ++++++++++++++++++ docs/fundamentals/mask.md | 18 +++ docs/fundamentals/rv.md | 15 ++ docs/fundamentals/segment.md | 71 +++++++++ docs/getting_started/first_fit.md | 27 ++++ docs/getting_started/first_spectrum.md | 58 +++++++ docs/getting_started/index.rst | 14 ++ docs/getting_started/installation.md | 87 +++++++++++ docs/getting_started/nlte.md | 30 ++++ docs/index.rst | 51 ++++--- docs/reference/api.rst | 7 + docs/reference/cli_or_scripts.rst | 8 + docs/reference/index.rst | 10 ++ docs/usage/atmosphere.rst | 53 ------- docs/usage/installation.md | 42 ------ docs/usage/lfs.md | 112 -------------- docs/usage/linelist.rst | 67 --------- docs/usage/nlte.md | 66 -------- docs/usage/quickstart.md | 125 --------------- docs/usage/quickstart_old.md | 95 ------------ 50 files changed, 1154 insertions(+), 626 deletions(-) create mode 100644 docs/_static/custom.css create mode 100644 docs/_static/figures/first_spectrum.png create mode 100644 docs/_static/nlte_table.png create mode 100644 docs/advance/derived_param.md rename docs/{usage => advance}/faq.md (100%) rename docs/{usage => advance}/fordev.md (91%) rename docs/{usage => advance}/how-to.md (100%) create mode 100644 docs/advance/index.rst create mode 100644 docs/advance/line_filtering.md rename docs/{usage => concepts}/abundance.md (100%) rename docs/{usage => concepts}/atmosphere.md (87%) create mode 100644 docs/concepts/data_files.md rename docs/{usage => concepts}/fitparameters.md (94%) rename docs/{usage => concepts}/fitresults.md (99%) create mode 100644 docs/concepts/index.rst create mode 100644 docs/concepts/lfs.md create mode 100644 docs/concepts/nlte.md rename docs/{usage => concepts}/sme_struct.md (85%) rename docs/{usage/system_info.rst => concepts/system_info.md} (68%) rename docs/{usage => dev}/changelog.md (100%) rename docs/{usage => dev}/changes.rst (100%) create mode 100644 docs/dev/index.rst create mode 100644 docs/dev/old_docs.md create mode 100644 docs/fundamentals/abund.md create mode 100644 docs/fundamentals/continuum.md create mode 100644 docs/fundamentals/flux_inten.md create mode 100644 docs/fundamentals/index.rst create mode 100644 docs/fundamentals/io.md create mode 100644 docs/fundamentals/linelist.md create mode 100644 docs/fundamentals/mask.md create mode 100644 docs/fundamentals/rv.md create mode 100644 docs/fundamentals/segment.md create mode 100644 docs/getting_started/first_fit.md create mode 100644 docs/getting_started/first_spectrum.md create mode 100644 docs/getting_started/index.rst create mode 100644 docs/getting_started/installation.md create mode 100644 docs/getting_started/nlte.md create mode 100644 docs/reference/api.rst create mode 100644 docs/reference/cli_or_scripts.rst create mode 100644 docs/reference/index.rst delete mode 100644 docs/usage/atmosphere.rst delete mode 100644 docs/usage/installation.md delete mode 100644 docs/usage/lfs.md delete mode 100644 docs/usage/linelist.rst delete mode 100644 docs/usage/nlte.md delete mode 100644 docs/usage/quickstart.md delete mode 100644 docs/usage/quickstart_old.md diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e1abd260..f7e3f303 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -27,3 +27,6 @@ sphinx: python: install: - requirements: docs/requirements.txt + # Install the project itself so version metadata resolves from tags. + - method: pip + path: . diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 00000000..b8f0d867 --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,52 @@ +.home-cards { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; + margin: 1.25rem 0 1.75rem; +} + +.home-card { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 13.5rem; + padding: 1.1rem 1rem; + border: 1px solid var(--pst-color-border, #d0d7de); + border-radius: 0.75rem; + background: var(--pst-color-surface, #f6f8fa); + text-decoration: none; + color: var(--pst-color-text-base, #24292f); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + transition: transform 120ms ease, box-shadow 120ms ease, border-color 120ms ease; +} + +.home-card:hover { + transform: translateY(-2px); + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12); + border-color: var(--pst-color-primary, #2b6cb0); + text-decoration: none; +} + +.home-card h3 { + margin: 0 0 0.5rem; + font-size: 1.35rem; + line-height: 1.2; +} + +.home-card p { + margin: 0; + color: var(--pst-color-text-muted, #57606a); +} + +.home-card-cta { + margin-top: 1rem; + align-self: flex-start; + font-weight: 600; + color: var(--pst-color-primary, #2b6cb0); +} + +@media (max-width: 1050px) { + .home-cards { + grid-template-columns: 1fr; + } +} diff --git a/docs/_static/figures/first_spectrum.png b/docs/_static/figures/first_spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..73d1f071ce01cd4e57f24099457e6f722d7d778e GIT binary patch literal 70207 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 hQFA{G@_(ptzh8F;@E>5dOr-z- literal 0 HcmV?d00001 diff --git a/docs/_static/nlte_table.png b/docs/_static/nlte_table.png new file mode 100644 index 0000000000000000000000000000000000000000..3488feb8fa1d01102d2a2578a9ba975e85369c5c GIT binary patch literal 355543 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

}VxPGV}&GqM;u>;o>8pso+Mb`sz5C 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

  • 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

    )2X2xs2r>2sI(*ypSFwbXS4mg+09q(YIfEp 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⪼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%0DFFF|?$gBrBf`W!VG0V5m8M>fxJ=mR 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

    3IADYcd8-Pk{Q1VrNN_}5=+;I9yL(vac7zG}ng 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 literal 0 HcmV?d00001 diff --git a/docs/advance/derived_param.md b/docs/advance/derived_param.md new file mode 100644 index 00000000..d8e829b8 --- /dev/null +++ b/docs/advance/derived_param.md @@ -0,0 +1,73 @@ +# Derived Parameters + +`derived_param` lets you define SME parameters as functions of other parameters +during fitting, without adding them to the free-parameter list. + +## What It Does + +In `solve(...)`, PySME: + +1. sets the current free parameters, +2. evaluates each function in `derived_param`, +3. writes the returned value back to `sme`, +4. runs synthesis and computes residuals. + +So derived parameters are updated at every iteration. + +## API + +```py +from pysme.solve import solve + +sme = solve( + sme, + param_names=[...], # free parameters + derived_param={...}, # derived parameters +) +``` + +- `derived_param` is a `dict[str, callable]`. +- Key: SME parameter name (for example `"vmic"` or `"abund Mg"`). +- Value: function `f(sme) -> float`. + +## Rules and Notes + +- A parameter cannot be both free and derived in the same run. +- `dynamic_param` is still accepted as a legacy alias, but it is deprecated. +- For abundance keys (for example `"abund Mg"`), return the **final abundance** + you want in the usual abundance scale. PySME applies the internal + `monh` conversion for you when writing into `sme.abund`. + +## Example 1: Tie `vmic` to `teff` and `logg` + +```py +import numpy as np +from pysme.solve import solve + +derived = { + "vmic": lambda s: np.clip(1.1 + 1e-4 * (s.teff - 5500.0) - 0.3 * (s.logg - 4.0), 0.2, 5.0) +} + +fit = ["teff", "logg", "monh", "vsini"] +sme = solve(sme, fit, derived_param=derived) +``` + +Here `vmic` is never fitted directly; it is recomputed from the current model +state at each iteration. + +## Example 2: Enforce fixed `[Mg/Fe]` + +```py +from pysme.abund import Abund +from pysme.solve import solve + +solar_mg = Abund.solar()["Mg"] + +# Target relation: [Mg/Fe] = +0.20 -> A(Mg) = A_sun(Mg) + [M/H] + 0.20 +derived = { + "abund Mg": lambda s: solar_mg + s.monh + 0.20 +} + +sme = solve(sme, ["teff", "logg", "monh"], derived_param=derived) +``` + diff --git a/docs/usage/faq.md b/docs/advance/faq.md similarity index 100% rename from docs/usage/faq.md rename to docs/advance/faq.md diff --git a/docs/usage/fordev.md b/docs/advance/fordev.md similarity index 91% rename from docs/usage/fordev.md rename to docs/advance/fordev.md index a5698ecd..51550436 100644 --- a/docs/usage/fordev.md +++ b/docs/advance/fordev.md @@ -85,6 +85,21 @@ The versions are controlled by `git tag`. For PySME, setting a new tag will update the version to the latest tag. For SMElib, setting a new release will based on a tag. +### Docs versioning policy (RTD) + +PySME docs use a tag-driven versioning strategy. + +1. Create release tags in `vX.Y.Z` format (for example `v0.6.23`). +2. `docs/conf.py` resolves `release` from `src/pysme/_version.py` (versioneer), so docs title/version follow git tags. +3. `.readthedocs.yaml` installs both docs requirements and the project itself, so tag metadata is available during RTD build. + +RTD project settings must also be configured once (in the RTD web UI): + +- Keep both `latest` (branch docs) and `stable` (latest release tag) enabled. +- Set default docs version to `stable`. +- Add an automation rule to activate SemVer tags (`v*`) as RTD versions. +- Hide or deactivate outdated branch versions if needed. + ## NLTE departure coefficients What happens when the NLTE grid is added into PySME? @@ -150,4 +165,4 @@ Some extra test is needed to clear the situation. ### Installation -TBD. \ No newline at end of file +TBD. diff --git a/docs/usage/how-to.md b/docs/advance/how-to.md similarity index 100% rename from docs/usage/how-to.md rename to docs/advance/how-to.md diff --git a/docs/advance/index.rst b/docs/advance/index.rst new file mode 100644 index 00000000..9eb2fea2 --- /dev/null +++ b/docs/advance/index.rst @@ -0,0 +1,14 @@ +Advanced usage +======== + +This section collects advanced PySME functions, including derived-parameter +fitting, line-filtering strategies for performance, and developer-oriented notes. + +.. toctree:: + :maxdepth: 1 + + derived_param.md + line_filtering.md + how-to.md + fordev.md + faq.md \ No newline at end of file diff --git a/docs/advance/line_filtering.md b/docs/advance/line_filtering.md new file mode 100644 index 00000000..8c249af1 --- /dev/null +++ b/docs/advance/line_filtering.md @@ -0,0 +1,67 @@ +# Line Filtering + +For wide wavelength coverage (or many segments), using the full line list in +every segment is expensive. PySME provides dynamic line filtering to keep only +relevant lines per segment (see Jian et al. in prep). + +## Core Option + +Use `linelist_mode` in synthesis or solve: + +- `"all"`: use all lines (default). +- `"dynamic"`: filter lines by precomputed line properties (recommended for long spectra). +- `"auto"`: legacy alias of `"dynamic"` (deprecated). + +## How Dynamic Filtering Works + +When `linelist_mode="dynamic"`: + +1. PySME ensures line metadata exists (`central_depth`, `line_range_s`, `line_range_e`). + If missing or stale, it updates them via `update_cdr(...)`. +2. For each segment, PySME keeps lines that overlap the segment range + (with broadening margin) and pass a strength threshold. +3. Only this reduced line subset is sent to SMElib for that segment. + +This can significantly reduce runtime for long or segmented spectra. + +## Main Controls + +- `sme.cdr_depth_thres`: minimum line-strength threshold used in filtering. +- `sme.cdr_N_line_chunk`: chunk size used in `update_cdr`. +- `sme.cdr_parallel`: enable/disable parallel `update_cdr`. +- `sme.cdr_n_jobs`: number of parallel jobs. +- `cdr_database` / `cdr_create` (function args): reuse or build a CDR grid on disk. + +## Example 1: Dynamic Filtering in Synthesis + +```py +from pysme.synthesize import Synthesizer, synthesize_spectrum + +synth = Synthesizer() +sme = synth.update_cdr(sme) # populate central_depth / line_range_* once +sme.cdr_depth_thres = 0.02 # keep only stronger lines + +sme = synthesize_spectrum(sme, linelist_mode="dynamic") +``` + +## Example 2: Dynamic Filtering in Solve + +```py +from pysme.solve import solve + +fit = ["teff", "logg", "monh", "vmic"] +sme = solve( + sme, + fit, + linelist_mode="dynamic", + cdr_database="path/to/cdr_grid", # optional on-disk CDR cache/grid + cdr_create=False, # set True to force regeneration +) +``` + +## Practical Guidance + +- Start with `sme.cdr_depth_thres = 0.0` and increase gradually if needed. +- Use `"all"` for short, narrow windows where filtering overhead may not help. +- Use `"dynamic"` for wide ranges or many segments. + diff --git a/docs/usage/abundance.md b/docs/concepts/abundance.md similarity index 100% rename from docs/usage/abundance.md rename to docs/concepts/abundance.md diff --git a/docs/usage/atmosphere.md b/docs/concepts/atmosphere.md similarity index 87% rename from docs/usage/atmosphere.md rename to docs/concepts/atmosphere.md index 669889fc..c3b56ee6 100644 --- a/docs/usage/atmosphere.md +++ b/docs/concepts/atmosphere.md @@ -47,7 +47,27 @@ The atmopshere object has the following fields: |`wlstd`|Wavelength for continuum optical depth scale.|Å, Default value: 5000Å| |`opflag`|Flags that indicate whether to enable various opacity packages during the radiative transfer calculation|| -## Grid atmospheres +## Atmosphere grids: + +- recommended: + - marcs2012.sav [(Gustafsson et al. 2008)](https://ui.adsabs.harvard.edu/abs/2008A%26A...486..951G) + - marcs2012p_t0.0.sav + - marcs2012p_t1.0.sav + - marcs2012p_t2.0.sav + - marcs2012s_t1.0.sav + - marcs2012s_t2.0.sav + - marcs2012s_t5.0.sav + - marcs2012t00cooldwarfs.sav + - marcs2012t01cooldwarfs.sav + - marcs2012t02cooldwarfs.sav + +- deprecated: + - atlas12.sav + - atlas9_vmic0.0.sav + - atlas9_vmic2.0.sav + - ll_vmic2.0.sav + +### Grid plots ![](../img/atmosphere/marcs2012_grid.png) ![](../img/atmosphere/marcs2012p_t0.0_grid.png) diff --git a/docs/concepts/data_files.md b/docs/concepts/data_files.md new file mode 100644 index 00000000..c96d3d4b --- /dev/null +++ b/docs/concepts/data_files.md @@ -0,0 +1,20 @@ +Data Files You Need +=================== + +PySME uses local cache data under `~/.sme/`. + +Typical files: + +- Atmosphere grids +- NLTE grids +- Optional custom resources + +```{admonition} Accessing data files +The atmosphere and nlte data files should be downloaded from the server automatically when used, so network connection is required when using PySME (not only during installation). +These files can also be downloaded manually by: +- Download data files as part of IDL SME from [here](http://www.stsci.edu/~valenti/sme.html). +- copy them into their respective storage locations in ~/.sme/atmospheres and ~/.sme/nlte_grids + - atmospheres: everything from SME/atmospheres +- Download the nlte_grids in [zenodo](https://doi.org/10.5281/zenodo.3888393). +- The files (mainly atmosphere models and NLTE departure coefficnent grids) required by PySME will be saved inside `~/.sme/`. These files can be large thus if your home directory is small, we recommend to create a softlink for `~/.sme`. +``` diff --git a/docs/usage/fitparameters.md b/docs/concepts/fitparameters.md similarity index 94% rename from docs/usage/fitparameters.md rename to docs/concepts/fitparameters.md index 85af5122..09e47987 100644 --- a/docs/usage/fitparameters.md +++ b/docs/concepts/fitparameters.md @@ -45,3 +45,4 @@ It is therefore recommended to use `'cscale_flag'` and `'vrad_flag'` to specify the desired fitting method. If `'vrad'` is passed as a fitparameter it is equivalent to `'vrad_flag' = 'each'`, and if `'cont'` is passed it is the same as `'cscale_flag' = 'linear'`. +See the [radial velocity](../fundamentals/rv.md) and [continuum](../fundamentals/continuum.md) page for more information. \ No newline at end of file diff --git a/docs/usage/fitresults.md b/docs/concepts/fitresults.md similarity index 99% rename from docs/usage/fitresults.md rename to docs/concepts/fitresults.md index 90670116..803d0a02 100644 --- a/docs/usage/fitresults.md +++ b/docs/concepts/fitresults.md @@ -35,7 +35,8 @@ We estimate the cumulative distribution function of the **generalized** normal d #normalize y /= y[-1] ``` -![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Normal_Distribution_CDF.svg/500px-Normal_Distribution_CDF.svg.png) +![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Normal_Distribution_CDF.svg/500px-Normal_Distribution_CDF.svg.png). + (Example of the cumulative distribution function for various values of sigma) diff --git a/docs/concepts/index.rst b/docs/concepts/index.rst new file mode 100644 index 00000000..93d419d2 --- /dev/null +++ b/docs/concepts/index.rst @@ -0,0 +1,17 @@ +Concepts +======== + +Core model and data concepts behind PySME. + +.. toctree:: + :maxdepth: 1 + + sme_struct.md + abundance.md + atmosphere.md + nlte.md + fitparameters.md + fitresults.md + lsf.md + data_files.md + system_info.md diff --git a/docs/concepts/lfs.md b/docs/concepts/lfs.md new file mode 100644 index 00000000..9171cb2f --- /dev/null +++ b/docs/concepts/lfs.md @@ -0,0 +1,6 @@ +# Large File Server + +PySME does not come with all of the large atmosphere or NLTE grids +as part of the distribution. Instead Uppsala University provides +a server that serves the files when needed. Simply specify one of +the available filenames and PySME will fetch the file on your next run. \ No newline at end of file diff --git a/docs/concepts/nlte.md b/docs/concepts/nlte.md new file mode 100644 index 00000000..59e0ee68 --- /dev/null +++ b/docs/concepts/nlte.md @@ -0,0 +1,128 @@ +# NLTE grids + +Non Local Thermal Equilibrium (NLTE) calculations are important to accuarately fit certain lines. +PySME supports them using pre-computed grids of NLTE departure coefficients, which need to be created for every element. +For common elements PySME provides grids (see below) via the LFS (see [](lfs.md)). +If any of these grids are used, please kindly take care to cite the papers describing the NLTE models and departure coefficient calculations. + +NLTE calculations need to be specified for each element they are supposed to be used for individually using `sme.nlte.set_nlte(el, grid)` (the `grid` can be omitted if there is a grid in lfs). +Similarly they can be disabled for each element using `sme.nlte.remove_nlte(el)`, where sme is your SME structure. +If no element is set to NLTE in the structure PySME will perform +LTE calculations only. + +## Fields of NLTE object + +- `elements`: The elements for which NLTE has been activated +- `grids`: The grid file that is used for each active element +- `subgrid_size`: A small segment of the NLTE grid will be cached in memory + to speed up calculations. This sets the size of that cache + by defining the number of points in each + axis (rabund, teff, logg, monh). +- `flags`: After the synthesis all lines are flaged if they used NLTE + +## Grid interpolation + +The grid has 6 dimensions. + +- teff: Effective Temperature +- logg: Surface Gravity +- monh: Overall Metallicity +- rabund: relative abundance of that element +- depth: optical depth in the atmosphere +- departure coefficients: + The NLTE departure coefficients describing how much + it varies from the LTE calculation + +We then perform linear interpolation to the stellar parameters +we want to model. And we then perform a cubic spline fit to the depth scale +of the model atmosphere we specified (See [](atmosphere)). + +We then use the linelist to find only the relevant transitions in the grid, +and pass the departure coefficients for each line to the C library. + +## NLTE flags in line list + +PySME provides information on whehter a line is synthesized in NLTE through the `nlte_flag` column in the line list. + +- `1`: this line was synthesized with in NLTE. +- `0`: this line was synthesized in LTE. +- `-1`: this line was not included in the current synthesis pass (see [](../advance/line_filtering.md)). + +## Recommended and default grids + +| Element | Grid name | Zenodo version | Citation | +|:---:|:---:|:---:|:---:| +| H | `nlte_H_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Li | `nlte_Li_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| C | `nlte_C_pysme.grd` | 2 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| N | `nlte_N_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| O | `nlte_O_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Na | `nlte_Na_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Mg | `nlte_Mg_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Al | `nlte_Al_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Si | `nlte_Si_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| S | `nlte_Si_pysme.grd` | 7 | [Amarsi et al. 2025](https://ui.adsabs.harvard.edu/abs/2025A%26A...703A..35A/abstract) | +| K | `nlte_K_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Ca | `nlte_Ca_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Ti | `nlte_Ti_pysme.grd` | 5 | [Mallinson et al. 2024](https://ui.adsabs.harvard.edu/abs/2024A%26A...687A...5M) | +| Mn | `nlte_Mn_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Fe | `nlte_Fe_pysme.grd` | 4 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | +| Cu | `nlte_Cu_pysme.grd` | 6 | [Caliskan et al. 2025](https://ui.adsabs.harvard.edu/abs/2025A%26A...696A.210C/abstract) | +| Ba | `nlte_Ba_pysme.grd` | 3 | [Amarsi et al. 2020](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) | + +All recommended/default grids are available in [Zenodo](https://zenodo.org/records/17064337). + +## Deprecated grids + + - H + - marcs2012_H2018.grd + - Li + - marcs2012_Li.grd [(Lind et al. 2009)](https://ui.adsabs.harvard.edu/abs/2009A%26A...503..541L) + - marcs2012_Li2009.grd [(Lind et al. 2009)](https://ui.adsabs.harvard.edu/abs/2009A%26A...503..541L) + - nlte_Li_multi.grd + - C + - marcs2012_C.grd + - N + - marcs2012_N.grd + - O + - marcs2012p_t1.0_O.grd [(Sitnova et al. 2013)](https://ui.adsabs.harvard.edu/abs/2013AstL...39..126S) + - marcs2012_O2015.grd [(Amarsi et al. 2016b)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.455.3735A) + - marcs2012_O.grd + - Na + - marcs2012p_t1.0_Na.grd [(Mashonkina et al. 2001)](https://ui.adsabs.harvard.edu/abs/2000ARep...44..790M) + - marcs2012_Na.grd [(Lind et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A.103L) + - marcs2012_Na2011.grd [(Lind et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A.103L) + - nlte_Na_multi_full.grd + - nlte_Na_multi_sun.grd + - Al + - marcs2012_Al.grd + - marcs2012_Al2017.grd + - Mg + - marcs2012_Mg2016.grd [(Osorio et al. 2016)](https://ui.adsabs.harvard.edu/abs/2016A%26A...586A.120O) + - marcs2012_Mg.grd + - Si + - marcs2012_Si2016.grd [(Amarsi & Asplund 2017)](https://ui.adsabs.harvard.edu/abs/2017MNRAS.464..264A) + - marcs2012_Si.grd + - K + - marcs2012_K.grd + - Ca + - marcs2012s_t2.0_Ca.grd [(Mashonkina et al. 2007)](https://ui.adsabs.harvard.edu/abs/2007A%26A...461..261M) + - marcs2012p_t1.0_Ca.grd [(Mashonkina et al. 2017)](https://ui.adsabs.harvard.edu/abs/2007A%26A...461..261M) + - marcs2012_Ca.grd + - Ti + - marcs2012s_t2.0_Ti.grd [(Sitnova et al. 2016)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.461.1000S) + - Mn + - marcs2012_Mn.grd + - Fe + - marcs2012_Fe2016.grd [(Amarsi et al. 2016a)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.463.1518A) + - marcs2012s_t2.0_Fe.grd [(Mashonkina et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A..87M) + - nlte_Fe_multi_full.grd + - marcs2012_Fe.grd + - Ba + - marcs2012p_t1.0_Ba.grd [(Mashonkina et al. 1999)](https://ui.adsabs.harvard.edu/abs/1999A%26A...343..519M) + - Eu + - nlte_Eu.grd + + + + diff --git a/docs/usage/sme_struct.md b/docs/concepts/sme_struct.md similarity index 85% rename from docs/usage/sme_struct.md rename to docs/concepts/sme_struct.md index 04228030..edb2dd23 100644 --- a/docs/usage/sme_struct.md +++ b/docs/concepts/sme_struct.md @@ -19,7 +19,6 @@ Stellar parameters describe the star in general and are usually what we want to - `vmac`: The macro-turbulence velocity in km s⁻¹. Describes turbulence on scales **larger** than the photon mean free path, also contributing to broadening. - `mu`: Limb-angle values ($\mu = \cos\theta$) at which the radiative-transfer calculation is performed. $\mu = 1$ corresponds to disk center, $0$ to the limb. - ## Radial velocity and Continuum The radial velocity and continuum shift the continuum @@ -43,17 +42,10 @@ PySME has many options to determine them. - each: Fit each wavelength segment individally - whole: Fit the whole spectrum at once -- `normalize_by_continuum`: - A flag that determines, whether the synthetic flux should be normalized - by the continous intensities or not. As long as you have a normalized - observation this should be True, but if you have a flux calibrated - spectrum this should be set to False. Note that even if this is False, - you can still fit a continuum normally using cscale_flag. -Spectra -------- +## Spectra -Spectra are given as a list of arrays[^#], where each array represents +Spectra are given as a list of arrays[^iliffe], where each array represents one wavelength segment of the spectrum. If there is only one segment, the list will only have one element. For legacy reasons there is also an interface to the 'old' system and names (e.g. smod instead of synth) @@ -85,8 +77,7 @@ from IDL SME. It is recommend however to use the new variables. adaptive grid. -Abundance ---------- +## Abundance The individal abundances are stored in a seperate Abundance object, which shares the same metallicity as the overall structure. @@ -94,13 +85,12 @@ For more detailed information see [](abundance). :abund: The abundance object -Linelist --------- +## Linelist The sme structure does contain the whole linelist in the linelist property. For legacy reasons, it also provides direct access to the 'species' and 'atomic' arrays. They refer directly to the linelist however. -For more detailed information see :ref:`linelist`. +For more detailed information see [](../fundamentals/linelist.md). :linelist: The linelist object :species: Names of the species of each spectral line @@ -108,26 +98,23 @@ For more detailed information see :ref:`linelist`. Atomic linelist data with columns "atom_number", "ionization", "wlcent", "excit", "gflog", "gamrad", "gamqst", "gamvw" -Atmosphere ----------- +## Atmosphere Unlike the linelist the atmosphere is stored in an external file, that is only referenced by name in the structure. -For more detailed information see :ref:`atmosphere`. +For more detailed information see [](atmosphere). :atmo: The atmosphere object -NLTE ----- +## NLTE Unlike the linelist, but similar to the atmosphere, the NLTE parameters are stored in external tables, which are only referenced -by name. For more detailed information see :ref:`nlte`. +by name. For more detailed information see [](nlte). :nlte: The NLTE object -Instrument Parameters ---------------------- +## Instrument Parameters PySME can also model instrumental broadening as part of the spectral synthesis. For this you need to specify the resolution @@ -144,21 +131,19 @@ and the broadening method to use. The y points of the instrument profile. Only relevant if iptype is 'table'. -Fitresults ----------- +## Fitresults :fitparameters: The fitparameters used for the fitting. - See :ref:`fitparameters`. -:fitresults: The fitresults object. See :ref:`fitresults`. + See [fitparameters](../concepts/fitparameters.md). +:fitresults: The fitresults object. See [fitresults](../concepts/fitresults.md). -System Information ------------------- +## System Information The sme structure does contain information about the host system. E.g. which operating system was used. This is mostly for legacy reasons, and potential debugging information. -For more information see :ref:`system_info`. +For more information see [system_info](../concepts/system_info.md). :system_info: The system information object. It replaces the idlver object. @@ -179,4 +164,4 @@ Other Parameters The date and time when this structure or the last synthetic spectrum was created -[^#] They are called Illiffe vectors in the code, and they were that in IDL. But they are technically not Illiffe vectors anymore, but just lists of individal numpy arrays. +[^iliffe]: They are called Illiffe vectors in the code, and they were that in IDL. But they are technically not Illiffe vectors anymore, but just lists of individal numpy arrays. diff --git a/docs/usage/system_info.rst b/docs/concepts/system_info.md similarity index 68% rename from docs/usage/system_info.rst rename to docs/concepts/system_info.md index 961687a1..c07eb179 100644 --- a/docs/usage/system_info.rst +++ b/docs/concepts/system_info.md @@ -1,12 +1,10 @@ -.. _system_info: +# System Info -System Info -=========== The system info object is mostly for debugging, so you probably -dont need to worry about it. +don't need to worry about it. -Still here are the fields +Still here are the fields: :arch: System architecture :os: Operating system @@ -15,5 +13,4 @@ Still here are the fields :release: Python version :build_date: build date of the python version :memory_bits: Platform architecture bit size (32bit or 64bit) -:file_offset_bits: ? -:host: Name of the machine +:host: Name of the machine \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 15992621..43dfdb10 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,8 +14,10 @@ # import os import sys +import importlib.util -src_dir = os.path.abspath("..") +docs_dir = os.path.abspath(os.path.dirname(__file__)) +src_dir = os.path.abspath(os.path.join(docs_dir, "..")) sys.path.insert(0, src_dir) sys.path.insert(0, src_dir + "/src") @@ -26,10 +28,35 @@ copyright = "2025, Jeff Valenti, Nikolai Piskunov, Mingjie Jian, Ansgar Wehrhahn" author = "Jeff Valenti, Nikolai Piskunov, Mingjie Jian, Ansgar Wehrhahn" -# The short X.Y version -version = "" -# The full version, including alpha/beta/rc tags -release = "0.6.20" +def _resolve_release(): + """Resolve docs version from versioneer without importing pysme package. + + Importing ``pysme`` would trigger heavy runtime side effects in ``__init__``. + We therefore load ``src/pysme/_version.py`` directly. + """ + version_file = os.path.join(src_dir, "src", "pysme", "_version.py") + try: + spec = importlib.util.spec_from_file_location("pysme_version", version_file) + if spec is None or spec.loader is None: + raise RuntimeError(f"Could not load version spec from: {version_file}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module.get_versions().get("version", "unknown") + except Exception: + # Fallbacks keep docs buildable even without full VCS metadata. + return ( + os.environ.get("READTHEDOCS_GIT_IDENTIFIER") + or os.environ.get("READTHEDOCS_VERSION") + or "unknown" + ) + + +# The full version, including local build metadata (e.g. +g.dirty) +release = _resolve_release() +# The short X.Y version shown by Sphinx. +short_release = release.split("+")[0] +version_parts = short_release.split(".") +version = ".".join(version_parts[:2]) if len(version_parts) >= 2 else short_release # -- General configuration --------------------------------------------------- @@ -82,7 +109,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -118,6 +145,7 @@ "image_dark": "_static/pysme_logo-dark.png", } } +html_css_files = ["custom.css"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. diff --git a/docs/usage/changelog.md b/docs/dev/changelog.md similarity index 100% rename from docs/usage/changelog.md rename to docs/dev/changelog.md diff --git a/docs/usage/changes.rst b/docs/dev/changes.rst similarity index 100% rename from docs/usage/changes.rst rename to docs/dev/changes.rst diff --git a/docs/dev/index.rst b/docs/dev/index.rst new file mode 100644 index 00000000..97361388 --- /dev/null +++ b/docs/dev/index.rst @@ -0,0 +1,12 @@ +Development +=========== + +Developer-facing guides and maintenance notes. + +.. toctree:: + :maxdepth: 1 + + changelog.md + changes + old_docs.md + \ No newline at end of file diff --git a/docs/dev/old_docs.md b/docs/dev/old_docs.md new file mode 100644 index 00000000..931701cc --- /dev/null +++ b/docs/dev/old_docs.md @@ -0,0 +1,4 @@ +# Legacy SME Documentations + +- [IDLSME structure document (v5)](../_static/IDLSME_592_Struct-v5.pdf) +- [SME abundances (2012)](../_static/SME_abundances_2012.pdf) diff --git a/docs/fundamentals/abund.md b/docs/fundamentals/abund.md new file mode 100644 index 00000000..50b91189 --- /dev/null +++ b/docs/fundamentals/abund.md @@ -0,0 +1,69 @@ +# Abundance + +`sme.abund` stores elemental abundances, while `sme.monh` stores the global metallicity offset. +In PySME, these two are combined at synthesis time. + +## Core rule in PySME + +For elements heavier than He, the abundance used by SMElib is: + +``` +effective abundance = pattern abundance + sme.monh +``` + +Hydrogen and helium are not shifted by `monh`. + +## What this means when you modify abundances + +When you update one element in `sme.abund`, you are writing the **pattern** +value (before the global metallicity shift). +So if you want a target final abundance `A_target` (for example in `H=12`), use: + +``` +pattern_value = A_target - sme.monh +``` + +then assign that pattern value. + +```{warning} +Note that when printing out `abund`, `monh` is applied to the abundance values. +``` + +## Practical examples + +```py +from pysme.abund import Abund + +sme.abund = Abund.solar() +sme.monh = -0.20 +``` + +### 1. Set a target absolute abundance (H=12) + +If you want final `A(Mg) = 7.40`: + +```py +target = 7.40 +sme.abund["Mg"] = target - sme.monh +``` + +Because PySME adds `monh` later, this produces the intended final Mg abundance. + +### 2. Keep scaled-solar composition, only change metallicity + +```py +sme.monh = -0.50 +``` + +This shifts all metals (Z > 2) together by `-0.50 dex`, while keeping abundance ratios fixed. + +### 3. Set an element enhancement at fixed metallicity + +If you want `[Mg/Fe] = +0.30` at current `monh`, add `+0.30` to Mg in the +pattern relative to your base pattern. + + diff --git a/docs/fundamentals/continuum.md b/docs/fundamentals/continuum.md new file mode 100644 index 00000000..a90ef9c1 --- /dev/null +++ b/docs/fundamentals/continuum.md @@ -0,0 +1,12 @@ +# Continuum + +In PySME, the continuum level of the synthetic spectrum can be adjusted to match the observed spectrum using `cscale` and `cscale_flag`. + +- `cscale`: Polynomial coefficients (per segment) applied to the synthetic spectrum. + The polynomial is evaluated on the observed wavelength grid after shifting the first point to zero, i.e., `f(wave - wave[0])`. +- `cscale_flag`: Controls whether and how continuum correction is applied. + - `none`: No continuum correction. + - `fix`: Use the current `cscale` values without updating them. + - `constant`: Scale by a constant factor. + - `linear`: First-order polynomial (straight line). + - `quadratic`: Second-order polynomial. diff --git a/docs/fundamentals/flux_inten.md b/docs/fundamentals/flux_inten.md new file mode 100644 index 00000000..708e06bb --- /dev/null +++ b/docs/fundamentals/flux_inten.md @@ -0,0 +1,37 @@ +# Flux and intensity + +This page summarizes two switches that control how PySME outputs synthetic spectra. + +## `normalize_by_continuum` + +`normalize_by_continuum` controls whether the synthetic spectrum is divided by +the synthetic continuum: + +- `True` (default): output a continuum-normalized spectrum (usually for normalized observations) +- `False`: keep flux-level output (usually for flux-calibrated observations) + +Even when this is `False`, continuum fitting can still be enabled through +`cscale_flag`. + +## `specific_intensities_only` + +`specific_intensities_only` controls whether PySME returns angle-dependent +specific intensities or disk-integrated flux: + +- `False` (default): integrate specific intensities over the stellar disk and return flux +- `True`: return specific intensities directly, without flux-level post-processing + - Note that in this case, `synthesize_spectrum` will only return the specific intensities, not the `sme` object. + +This is useful when you want the radiative-transfer output itself (as a function +of angle), rather than only the final integrated spectrum. + +## Typical usage + +- Normalized stellar spectrum fitting: + - `normalize_by_continuum = True` + - `specific_intensities_only = False` +- Flux-calibrated analysis: + - `normalize_by_continuum = False` + - `specific_intensities_only = False` +- Intensity-level diagnostics / custom integration: + - `specific_intensities_only = True` diff --git a/docs/fundamentals/index.rst b/docs/fundamentals/index.rst new file mode 100644 index 00000000..4a265ade --- /dev/null +++ b/docs/fundamentals/index.rst @@ -0,0 +1,17 @@ +Fundamentals and usage +================ + +This section introduces the fundamentals you need before running synthesis or fitting in PySME. +It covers the key data structures and controls that define spectra, line selection, and model behavior. + +.. toctree:: + :maxdepth: 1 + + mask.md + rv.md + continuum.md + linelist.md + abund.md + segment.md + flux_inten.md + io.md diff --git a/docs/fundamentals/io.md b/docs/fundamentals/io.md new file mode 100644 index 00000000..2f38a99a --- /dev/null +++ b/docs/fundamentals/io.md @@ -0,0 +1,10 @@ +# Save and Load + +The SME structure can be loaded with +```py +sme = SME_Structure.load("in.sme") +``` +or saved with +```py +sme.save("out.sme") +``` \ No newline at end of file diff --git a/docs/fundamentals/linelist.md b/docs/fundamentals/linelist.md new file mode 100644 index 00000000..8ca4972f --- /dev/null +++ b/docs/fundamentals/linelist.md @@ -0,0 +1,142 @@ +# Linelist + +`linelist` is one of the core inputs for spectral synthesis. It stores the +physical parameters of each transition (element/species, wavelength, `log gf`, +damping parameters, etc.). + +## Getting a Linelist from VALD + +PySME is designed to work well with all types of line lists in [VALD](https://vald.astro.uu.se/) database. +A common workflow is: + +1. Download a line list from VALD (typically from `extract stellar`). +2. Load it in PySME with `ValdFile`. + +```py +from pysme.linelist.vald import ValdFile + +vald = ValdFile("my_linelist.lin") +sme.linelist = vald +``` + +## Linelist is essentially a DataFrame + +Internally, PySME stores `LineList` data in a `pandas.DataFrame` +(`sme.linelist._lines`). +So you can use DataFrame-style operations directly: filtering, sorting, +editing columns, adding flags, and so on. + +```py + +# Filter by wavelength range +sub = sme.linelist[(sme.linelist["wlcent"] > 6436.0) & (sme.linelist["wlcent"] < 6444.0)] + +# Select one species (for example, Fe I) +fe1 = sme.linelist[sme.linelist["species"] == "Fe 1"] +``` + +## Short vs Long Format + +VALD provides two line list formats: + +- short: fewer fields, suitable for LTE. +- long: includes additional upper/lower level and quantum-number information. + +If you plan to run NLTE, you should use **VALD long format**. +In PySME, NLTE relies on the extra level information available in long format; +short format does not provide enough information for that workflow. + +## Line parameters + +The short format fields are + +:`species`: + A string identifier including the element + and ionization state or the molecule +:`wlcent`: The central wavelength of the line in Angstrom +:`gflog`: + The log of the product of the statistical weight of + the lower level and the oscillator strength for the transition. +:`excit`: The excitation energy in the lower level +:`ionization`: The ionization state of the species, where 1 is neutral +:`gamrad`: The radiation broadening parameter +:`gamqst`: Stark broadening parameter +:`gamvw`: van der Waals broadening parameter +:`lande`: The lande factor +:`depth`: An arbitrary depth estimation of the line +:`reference`: A citation where this data came from +:`atom_number`: + Identifies the species by the atomic number + (i.e. the number of protons) + +In addition the long format has the following fields + +:`lande_lower`: The lower Lande factor +:`lande_upper`: The upper Lande factor +:`j_lo`: The spin of the lower level +:`j_up`: The spin of the upper level +:`e_upp`: The energy of the upper level +:`term_lower`: The electron configuration of the lower level +:`term_upper`: The electron configuration of the upper level +:`error`: An uncertainty estimate for this linedata + +### Runtime columns + +:`nlte_flag`: Per-line NLTE usage flag written after synthesis. See [NLTE flags in line list](../concepts/nlte.md#nlte-flags-in-line-list). +:`central_depth`: Estimated central line depth used for line selection/filtering. See [Line Filtering](../advance/line_filtering.md). +:`line_range_s`: Start wavelength of the estimated line-contribution range. See [Line Filtering](../advance/line_filtering.md). +:`line_range_e`: End wavelength of the estimated line-contribution range. See [Line Filtering](../advance/line_filtering.md). + + +### Important Note + +As far as the radiative transfer code is concerned the ionization is defined as part of the species term. +I.e. a line with species = "Fe 2" will be calculated as ionization = 2. +If no number is set within the species field, SME will use an ionization of 1. + +Also atom_number is ignored in the radiative transfer calculations and therefore does not need to be set. + +## Example Linelist + +Below is a typical `sme.linelist` excerpt (middle rows omitted): + +```text + species wlcent gflog excit j_lo e_upp j_up lande_lower \ +0 Fe 1 6436.4055 -2.460 4.186364 2.0 6.112128 1.0 0.68 +1 Eu 2 6437.6106 -1.242 1.319612 5.0 3.245008 5.0 1.73 +2 Eu 2 6437.6121 -1.280 1.319636 5.0 3.245027 5.0 1.73 +3 Eu 2 6437.6135 -2.473 1.319612 5.0 3.245008 5.0 1.73 +4 Eu 2 6437.6194 -2.511 1.319636 5.0 3.245027 5.0 1.73 +.. ... ... ... ... ... ... ... ... +62 Mn 1 6443.4689 -2.818 3.772307 1.5 5.695960 2.5 1.21 +63 Mn 1 6443.4726 -3.538 3.772307 1.5 5.695960 2.5 1.21 +64 Mn 1 6443.4821 -2.275 3.772307 1.5 5.695960 2.5 1.21 +65 Mn 1 6443.4887 -2.964 3.772307 1.5 5.695960 2.5 1.21 +66 Mn 1 6443.4938 -3.918 3.772307 1.5 5.695960 2.5 1.21 + + lande_upper lande ... term_lower couple_upper \ +0 0.56 0.73 ... 3d8 c3F LS +1 1.79 1.76 ... 4f7.(8S).5d a9D* JJ +2 1.79 1.76 ... 4f7.(8S).5d a9D* JJ +3 1.79 1.76 ... 4f7.(8S).5d a9D* JJ +4 1.79 1.76 ... 4f7.(8S).5d a9D* JJ +.. ... ... ... ... ... +62 1.37 1.49 ... 3d5.4s2 b4D LS +63 1.37 1.49 ... 3d5.4s2 b4D LS +64 1.37 1.49 ... 3d5.4s2 b4D LS +65 1.37 1.49 ... 3d5.4s2 b4D LS +66 1.37 1.49 ... 3d5.4s2 b4D LS + + term_upper error nlte_flag atom_number ionization \ +0 3d6.(3F2).4s.4p.(3P*) v3D* 0.50 0 1.0 1.0 +1 4f7.(8S<7/2>).6p<3/2> (7/2,3/2) 1.00 0 1.0 2.0 +2 4f7.(8S<7/2>).6p<3/2> (7/2,3/2) 1.00 0 1.0 2.0 +3 4f7.(8S<7/2>).6p<3/2> (7/2,3/2) 1.00 0 1.0 2.0 +4 4f7.(8S<7/2>).6p<3/2> (7/2,3/2) 1.00 0 1.0 2.0 +.. ... ... ... ... ... +62 3d6.(5D).4p z4D* 0.25 0 1.0 1.0 +63 3d6.(5D).4p z4D* 0.25 0 1.0 1.0 +64 3d6.(5D).4p z4D* 0.25 0 1.0 1.0 +65 3d6.(5D).4p z4D* 0.25 0 1.0 1.0 +66 3d6.(5D).4p z4D* 0.25 0 1.0 1.0 +``` diff --git a/docs/fundamentals/mask.md b/docs/fundamentals/mask.md new file mode 100644 index 00000000..a0452891 --- /dev/null +++ b/docs/fundamentals/mask.md @@ -0,0 +1,18 @@ +# Mask + +Masking the observed spectrum is supported in `solve`. +The code will then allocate the corresponding pixel to different mask, and perform different manupulation to them. + +The mask, `sme.mask` is an array with `dtype=int` with the same length with `sme.wave`. +The types of mask are: + +|mask value|mask name|Description| +|:--:|:--:|:--:| +|0|bad pixel|Pixels excluded| +|1|line pixel|Pixels included in the parameter fitting| +|2|continuum pixel|Pixels included in continuum fitting| +|4|vrad pixel|Pixels included in radial velocity fitting| + +The masks are additive, i.e., you can set mask value to 5 for line and vrad pixel. Only the good pixels will be included in the fit, but the synthetic spectrum will still be calculated. + +In default, mask is all 1. \ No newline at end of file diff --git a/docs/fundamentals/rv.md b/docs/fundamentals/rv.md new file mode 100644 index 00000000..71a6f230 --- /dev/null +++ b/docs/fundamentals/rv.md @@ -0,0 +1,15 @@ +# Radial velocity (vrad) + +`vrad` in PySME is segment-aware and has two functions (with `vrad_flag`): + +- fit RV from observation vs. synthetic spectrum +- apply RV shift to synthetic spectrum before comparison + +## Core parameters + +- `vrad`: radial velocity in km/s for each segment +- `vrad_flag`: controls how RV is determined + - `none`: no RV fitting + - `fix`: use the current `sme.vrad` to shift the synthetic spectra and do not change it + - `each`: fit one RV per segment + - `whole`: fit one shared RV from all selected segments \ No newline at end of file diff --git a/docs/fundamentals/segment.md b/docs/fundamentals/segment.md new file mode 100644 index 00000000..0edb977b --- /dev/null +++ b/docs/fundamentals/segment.md @@ -0,0 +1,71 @@ +# Spectral segment + +A segment is one wavelength chunk of the spectrum. +PySME is segment-aware by design: most spectral arrays are stored as a list-like +object with one entry per segment. + +## Why segments exist + +Segments are useful when: + +- your observation is naturally split into orders/chunks +- different chunks have different wavelength sampling/resolution/radial velocity. +- you want to process only part of the spectrum in synthesis/solve + +## How segments are defined + +PySME can get segment information from either: + +- `sme.wave`: explicit wavelength arrays (recommended when available) +- `sme.wran`: only segment boundaries `[[w0_start, w0_end], [w1_start, w1_end], ...]` + +If `sme.wave` exists, it effectively defines segment boundaries. +If only `sme.wran` is given, PySME synthesizes each segment within those ranges. + +## Segment-aware inputs + +Typical segment-aware fields are: + +- `wave` +- `spec` +- `uncs` +- `mask` +- `synth` +- `cont` +- `wint` (optional transfer grid) +- `vrad` +- `cscale` + +You can pass these as: + +- a single 1D array for one segment +- a list of arrays for multiple segments + +## Parameters that are not segmented + +Some model parameters are global (single value for all segments), e.g.: + +- `vmic` +- `vmac` +- `vsini` + +Some are scalar-or-per-segment, e.g.: + +- `ipres`: can be one value or one value per segment +- `vrad`: handled per segment, depending on `vrad_flag` + +## Choosing which segments to run + +Both `synthesize_spectrum(...)` and `solve(...)` accept a `segments` argument. + +- `segments="all"`: run all segments +- `segments=[0, 2, ...]`: run selected segments only + +Invalid indices raise an error. +Segments that are fully masked as bad pixels are skipped automatically. + +## Practical notes + +- Keep segment ordering consistent across all segment-aware inputs. +- If you provide per-segment arrays, lengths must match within each segment. +- For simple single-chunk workflows, using one 1D `wave` array is enough. diff --git a/docs/getting_started/first_fit.md b/docs/getting_started/first_fit.md new file mode 100644 index 00000000..aa2ac15b --- /dev/null +++ b/docs/getting_started/first_fit.md @@ -0,0 +1,27 @@ +# Fit an observed spectrum + +Assuming that we have an observed spectrum, with its wavelength, normalized flux, and uncertainties, as an array of `wave`, `flux` and `uncertainties`. + +They can be inserted into the SME structure with: +```py +sme = SME_Structure() +sme.teff, sme.logg, sme.monh, sme.vmic, sme.vmac, sme.vsini = 5777, 4.4, 0, 1.09, 4.19, 1.60 +sme.abund = Abund.solar() +sme.linelist = vald +sme.iptype = 'gauss' +sme.ipres = 42000 +sme.wave = wave +sme.spec = flux +sme.uncs = uncertainties +``` + +The new inputs are the [instrument resolution](../concepts/sme_struct.md#instrument-parameters) and [observed spectra](../concepts/sme_struct.md#spectra). + +Then the `solve` function can be used to find the best fit solution: +```py +from pysme.solve import solve +fitparameters = ["teff", "logg", "monh", "abund Mg"] +sme = solve(sme, fitparameters) +``` + +The [fitresults](../concepts/sme_struct.md#fitresults) are stored in `sme.fitresults`. \ No newline at end of file diff --git a/docs/getting_started/first_spectrum.md b/docs/getting_started/first_spectrum.md new file mode 100644 index 00000000..33012188 --- /dev/null +++ b/docs/getting_started/first_spectrum.md @@ -0,0 +1,58 @@ +# Synthesize your first spectrum + +Three parts of information is needed to synthesize a spectrum: +- Stellar atmosphere model; +- Stellar parameters; +- Line list. + +The first two can be handeled in PySME: + +```py +from pysme.sme import SME_Structure +from pysme.abund import Abund + +sme = SME_Structure() +sme.teff, sme.logg, sme.monh = 5700, 4.4, 0 +sme.abund = Abund.solar() +``` + +Here we defined effective temperature `teff`, surface gravity `logg`, metallicity `monh`, and solar [chemical abundance](../concepts/abundance.md) `abund`. +For a full list of stellar parameters, see [](../concepts/sme_struct.md). + +LineList can be download from [VALD database](https://vald.astro.uu.se/). +Here we provide an example line list: [sun.lin](https://raw.githubusercontent.com/MingjieJian/PySME/master/examples/sun.lin). +Load the line list using: +```py +from pysme.linelist.vald import ValdFile +vald = ValdFile("linelist.lin") +sme.linelist = vald +``` +Define wavelength grid or wavelength range of the synthetic spectrum: +```py +import numpy as np +sme.wave = np.arange(6436, 6440, 0.1) +# Or +sme.wran = [6436, 6440] # pysme will choose sampling automatically +``` + +Then use the `synthesize_spectrum` function: +```py +from pysme.synthesize import synthesize_spectrum +sme = synthesize_spectrum(sme) +``` + +The synthesized spectra are stored in `sme.wave` and `sme.synth`: +```py +Iliffe_vector([array([6436. , 6436.1, 6436.2, ..., 6439.8, 6439.9])]) +Iliffe_vector([array([0.99986606, 0.99984309, 0.99980888, ..., 0.99754268, 0.99807395])]) +``` + +and can be plot by (for example): + +```py +import matplotlib.pyplot as plt + +plt.plot(sme.wave[0], sme.synth[0]) +``` + +`[0]` is required because PySME stores spectra as segments; here the result is recognized as segment 0. \ No newline at end of file diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst new file mode 100644 index 00000000..36780003 --- /dev/null +++ b/docs/getting_started/index.rst @@ -0,0 +1,14 @@ +Getting Started +=============== + +Start here if you are new to PySME. The goal is to run a full minimal workflow quickly. + +.. toctree:: + :maxdepth: 1 + + installation.md + first_spectrum.md + first_fit.md + nlte.md + .. data_files + .. troubleshooting diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md new file mode 100644 index 00000000..b62588f4 --- /dev/null +++ b/docs/getting_started/installation.md @@ -0,0 +1,87 @@ +# Installation + +PySME can be installed through PyPI (recommended; stable release) or from github (the latest version in `develop` branch) directly. + +```{admonition} Supported environments: +- Platforms: Linux, macOS +- Windows: supported via WSL2 (install/run PySME inside the Linux subsystem) +- Python versions: + - 3.9–3.13. +``` + +## Set up virtual environment + +This step is optional but recommended. + +### conda + +```bash +conda create -n pysme python=3.12 +conda activate pysme +``` + +### venv (alternative) + +```bash +python -m venv .venv +source .venv/bin/activate +``` + +## Install PySME + +### Stable release (recommended) + +```bash +pip install pysme-astro +``` + +### From Github + +#### Clone the repository + +```bash +git clone https://github.com/MingjieJian/SME.git +cd SME +``` + +#### Install PySME from source + +```bash +pip install -U pip +pip install . +``` + +## Verify installation + +```bash +python -c "import pysme; print('PySME version:', pysme.__version__)" +``` + +You should see an output of `PySME version: [version]`. + +## Uninstall + +You can uninstall PySME by: +```sh +pip uninstall pysme-astro +``` + +```{warning} +Note that several files (data file, SMElib file etc) will remain after the uninstall. +They are all list in the output of the pip command, and it is recommended to remove them manually. +``` + +The content below to be removed. + +## Running SME +- An simple minimum example is provided in the [examples directory](https://github.com/MingjieJian/SME/tree/master/examples). Make sure to also download the provided input structure. +- You can then run it with: `python minimum.py` + +```{warning} +PySME requires a **pre-compiled C++/Fortran SME library**. +Wheels are currently provided for Linux and macOS. +For Windows, we recommend using **WSL2** (install PySME inside the Linux environment). + +- PySME requires the pre-compled C++/Fortran SME library to run. Currently we deliver SME library with Linux and Mac version; for Windows users, we recommend to use WSL and hence the Linux version. + +``` \ No newline at end of file diff --git a/docs/getting_started/nlte.md b/docs/getting_started/nlte.md new file mode 100644 index 00000000..b4177500 --- /dev/null +++ b/docs/getting_started/nlte.md @@ -0,0 +1,30 @@ +## NLTE correction + +The non-Local Thermal Equilibrium (NLTE) correction can be applied to the spectrum by setting the `nlte` attribute of the SME structure, before `synthesize_spectrum` or `solve`: +```py +sme.nlte.set_nlte(el) # such as "Ca" +# Or provide your own grid: +sme.nlte.set_nlte(el, "path_to_your_grid") +``` + +The current elements with NLTE correction includes: + +![](../_static/nlte_table.png) + +```{warning} +- Long format VALD linelist is required for NLTE calculations. +If only a short format has been given, then the calculations will only be in LTE. (See [](../fundamentals/linelist.md)) +- The NLTE grids are only compatible with the MARCS model atmosphere. +``` + +```{warning} + +``` + +```{note} +Upon the first use of the NLTE correction, the NLTE grid will be downloaded from the server and this may takes a while, depending on the size of the NLTE grid. +``` + +Similarly they can be disabled for each element using `sme.nlte.remove_nlte(el)`. + +More details on NLTE can be found in the [concept section](../concepts/nlte.md). \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 848e7221..e2d3cc68 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,27 +13,40 @@ PySME is its modern Python front-end: a wrapper around the original C++/Fortran * Automatic :math:`\chi^2` fitting for :math:`T_\mathrm{eff}`, :math:`\log{g}`, :math:`v_\mathrm{mic}`, [X/Fe] … * Seamless use of ATLAS and MARCS model atmospheres and VALD line lists -.. note:: - - * If you are new to PySME: follow the :doc:`usage/installation` and :doc:`usage/quickstart` to get started. - * If you want to get familiar with PySME: read the :doc:`usage/sme_struct` for detail information on using the code. - * If you are familiar with PySME: check out the :doc:`usage/how-to` and :doc:`usage/changelog` to see the new functions. +.. raw:: html + +

    .. toctree:: :maxdepth: 1 - :caption: Contents: - - Installation - usage/quickstart - usage/sme_struct - Large File Server - PySME how to - usage/faq - usage/system_info - usage/changes - Changelog - For dev - _sources/modules + + getting_started/index + fundamentals/index + advance/index + concepts/index + dev/index + +Citation +~~~~~~~~ + +- Jian et al. (2026; in prep.) +- `Wehrhahn et al. (2023) `_ Indices and tables ~~~~~~~~~~~~~~~~~~ @@ -44,4 +57,4 @@ Indices and tables .. rubric:: Quick links :GitHub repository: https://github.com/MingjieJian/SME -:Issue tracker: https://github.com/MingjieJian/SME/issues \ No newline at end of file +:Issue tracker: https://github.com/MingjieJian/SME/issues diff --git a/docs/reference/api.rst b/docs/reference/api.rst new file mode 100644 index 00000000..140c92a0 --- /dev/null +++ b/docs/reference/api.rst @@ -0,0 +1,7 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 2 + + /_sources/modules diff --git a/docs/reference/cli_or_scripts.rst b/docs/reference/cli_or_scripts.rst new file mode 100644 index 00000000..69a5bd35 --- /dev/null +++ b/docs/reference/cli_or_scripts.rst @@ -0,0 +1,8 @@ +CLI Or Scripts +============== + +PySME is primarily used as a Python library. + +For developer-side scripts and internal workflows, see: + +- :doc:`/usage/fordev` diff --git a/docs/reference/index.rst b/docs/reference/index.rst new file mode 100644 index 00000000..273c55bb --- /dev/null +++ b/docs/reference/index.rst @@ -0,0 +1,10 @@ +Reference +========= + +API and interface reference materials. + +.. toctree:: + :maxdepth: 1 + + api + cli_or_scripts diff --git a/docs/usage/atmosphere.rst b/docs/usage/atmosphere.rst deleted file mode 100644 index 7763650a..00000000 --- a/docs/usage/atmosphere.rst +++ /dev/null @@ -1,53 +0,0 @@ -.. _atmosphere: - -Atmosphere -========== - -For the spectral synthesis PySME needs a model atmosphere -to perform the radiative transfer in. PySME does not come -with a set of atmospheres in each distribution but instead -uses the LFS (See :ref:`lfs`) to fetch only the required -model atmosphere when run. - -If you want to provide your own model atmosphere file, it should be present in `~/.sme/atmospheres/`. - -Each atmosphere model file describes a grid of models, on -which we then linearly interpolate to the desired stellar parameters. -Sometimes we dare extrapolate from this grid as well, but in that case, -we always show a warnning. - -Note that the atmosphere also contains a seperate set of stellar -parameters, which is usually the same as that of the sme structure, -but can be different, if for example the atmosphere is embedded, i.e. -fixed, or has not been calculated yet. - -The atmopshere object has the following fields - -:teff: Effective Temperature in Kelvin -:logg: Surface Gravity in log(cgs) -:monh: Metallicity relative to the individual abundances -:abund: The individual abundances (see :ref:`abund`) -:vsini: Projected Rotational velocity in km/s -:vmic: Microturbulence velocity in km/s -:vmac: Macroturbulence veclocity in km/s -:vturb: Turbulent velocity in km/s -:lonh: ? Metallicity -:source: Filename of the atmosphere grid -:depth: - The depth scale to use for calculations. - Either RHOX or TAU -:interp: - The depth scale to use for interpolation. - Either RHOX or TAU -:geom: - The geometry of the atmopshere. Either Plane - Parallel 'PP' or Spherical 'SPH'. -:method: - The method to use for interpolation. Either - 'grid' for a model grid or 'embedded' if - only a single atmosphere is given. -:rhox: 'Column density' depth scale -:tau: 'Optical depth' depth scale -:temp: Temperature profile -:xna: Number density of atoms, ions, and molecules in each depth -:xne: Number density of electrons in each depth diff --git a/docs/usage/installation.md b/docs/usage/installation.md deleted file mode 100644 index 82715657..00000000 --- a/docs/usage/installation.md +++ /dev/null @@ -1,42 +0,0 @@ -# Installation - -PySME can be installed through PyPI (recommended) or from github directly. - -Currently PySME is tested with Python verion 3.9-3.13. - -## (optional) set up virtual environment -- `conda env create --name pysme` - - You can specify python verion using `python=3.12` -- `source activate pysme` - -## Install -- For the "stable" version (recommended): - - `pip install pysme-astro` - -```{warning} -- PySME requires the pre-compled C++/Fortran SME library to run. Currently we deliver SME library with Linux and Mac version; for Windows users, we recommend to use WSL and hence the Linux version. -- The files (mainly atmosphere models and NLTE departure coefficnent grids) required by PySME will be saved inside `~/.sme/`. These files can be large thus if your home directory is small, we recommend to create a softlink for `~/.sme`. -``` - -## Running SME -- An simple minimum example is provided in the [examples directory](https://github.com/MingjieJian/SME/tree/master/examples). Make sure to also download the provided input structure. -- You can then run it with: `python minimum.py` - -```{admonition} Accessing data files -The atmosphere and nlte data files should be downloaded from the server automatically when used, so network connection is required when using PySME (not only during installation). -These files can also be downloaded manually by: -- Download data files as part of IDL SME from [here](http://www.stsci.edu/~valenti/sme.html). -- copy them into their respective storage locations in ~/.sme/atmospheres and ~/.sme/nlte_grids - - atmospheres: everything from SME/atmospheres -- Download the nlte_grids in [zenodo](https://doi.org/10.5281/zenodo.3888393). -``` - -## Uninstall - -You can uninstall PySME by: -```sh -pip uninstall pysme-astro -``` - -Note that several files (data file, SMElib file etc) will remain after the uninstall. -They are all list in the output of the pip command, and it is recommended to remove them manually. \ No newline at end of file diff --git a/docs/usage/lfs.md b/docs/usage/lfs.md deleted file mode 100644 index ffb69473..00000000 --- a/docs/usage/lfs.md +++ /dev/null @@ -1,112 +0,0 @@ -# Large File Server - -PySME does not come with all of the large atmosphere or NLTE grids -as part of the distribution. Instead Uppsala University provides -a server that serves the files when needed. Simply specify one of -the available filenames and PySME will fetch the file on your next run. - -## Available Files - -### Atmosphere grids: - -- recommended: - - marcs2012.sav [(Gustafsson et al. 2008)](https://ui.adsabs.harvard.edu/abs/2008A%26A...486..951G) - - marcs2012p_t0.0.sav - - marcs2012p_t1.0.sav - - marcs2012p_t2.0.sav - - marcs2012s_t1.0.sav - - marcs2012s_t2.0.sav - - marcs2012s_t5.0.sav - - marcs2012t00cooldwarfs.sav - - marcs2012t01cooldwarfs.sav - - marcs2012t02cooldwarfs.sav - -- deprecated: - - atlas12.sav - - atlas9_vmic0.0.sav - - atlas9_vmic2.0.sav - - ll_vmic2.0.sav - -### NLTE grids: - -- recommended and default grids: - - H - - nlte_H_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Li - - nlte_Li_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - C - - nlte_C_pysme.grd [(Amarsi et al. 2020; version 2)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - N - - nlte_N_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - O - - nlte_O_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Na - - nlte_Na_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Mg - - nlte_Mg_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Al - - nlte_Al_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Si - - nlte_Si_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - K - - nlte_K_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Ca - - nlte_Ca_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Ti - - nlte_Ti_pysme.grd [(Mallinson et al. 2024)](https://ui.adsabs.harvard.edu/abs/2024A%26A...687A...5M) - - Mn - - nlte_Mn_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Fe - - nlte_Fe_pysme.grd [(Amarsi et al. 2020; version 4)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - - Ba - - nlte_Ba_pysme.grd [(Amarsi et al. 2020; version 3)](https://ui.adsabs.harvard.edu/abs/2020A%26A...642A..62A) - -- deprecated: - - H - - marcs2012_H2018.grd - - Li - - marcs2012_Li.grd [(Lind et al. 2009)](https://ui.adsabs.harvard.edu/abs/2009A%26A...503..541L) - - marcs2012_Li2009.grd [(Lind et al. 2009)](https://ui.adsabs.harvard.edu/abs/2009A%26A...503..541L) - - nlte_Li_multi.grd - - C - - marcs2012_C.grd - - N - - marcs2012_N.grd - - O - - marcs2012p_t1.0_O.grd [(Sitnova et al. 2013)](https://ui.adsabs.harvard.edu/abs/2013AstL...39..126S) - - marcs2012_O2015.grd [(Amarsi et al. 2016b)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.455.3735A) - - marcs2012_O.grd - - Na - - marcs2012p_t1.0_Na.grd [(Mashonkina et al. 2001)](https://ui.adsabs.harvard.edu/abs/2000ARep...44..790M) - - marcs2012_Na.grd [(Lind et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A.103L) - - marcs2012_Na2011.grd [(Lind et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A.103L) - - nlte_Na_multi_full.grd - - nlte_Na_multi_sun.grd - - Al - - marcs2012_Al.grd - - marcs2012_Al2017.grd - - Mg - - marcs2012_Mg2016.grd [(Osorio et al. 2016)](https://ui.adsabs.harvard.edu/abs/2016A%26A...586A.120O) - - marcs2012_Mg.grd - - Si - - marcs2012_Si2016.grd [(Amarsi & Asplund 2017)](https://ui.adsabs.harvard.edu/abs/2017MNRAS.464..264A) - - marcs2012_Si.grd - - K - - marcs2012_K.grd - - Ca - - marcs2012s_t2.0_Ca.grd [(Mashonkina et al. 2007)](https://ui.adsabs.harvard.edu/abs/2007A%26A...461..261M) - - marcs2012p_t1.0_Ca.grd [(Mashonkina et al. 2017)](https://ui.adsabs.harvard.edu/abs/2007A%26A...461..261M) - - marcs2012_Ca.grd - - Ti - - marcs2012s_t2.0_Ti.grd [(Sitnova et al. 2016)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.461.1000S) - - Mn - - marcs2012_Mn.grd - - Fe - - marcs2012_Fe2016.grd [(Amarsi et al. 2016a)](https://ui.adsabs.harvard.edu/abs/2016MNRAS.463.1518A) - - marcs2012s_t2.0_Fe.grd [(Mashonkina et al. 2011)](https://ui.adsabs.harvard.edu/abs/2011A%26A...528A..87M) - - nlte_Fe_multi_full.grd - - marcs2012_Fe.grd - - Ba - - marcs2012p_t1.0_Ba.grd [(Mashonkina et al. 1999)](https://ui.adsabs.harvard.edu/abs/1999A%26A...343..519M) - - Eu - - nlte_Eu.grd \ No newline at end of file diff --git a/docs/usage/linelist.rst b/docs/usage/linelist.rst deleted file mode 100644 index c62d65a3..00000000 --- a/docs/usage/linelist.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. _linelist: - -Linelist -======== - -The linelist is an important part of every synthetic spectrum, -since it includes all information that is line specific. - -Line format ------------ - -PySME knows to types of linelists. A short format, and a long format. -The difference between the two is the amount of information contained therein. -The short format contains only enough parameters for LTE calculations, -while the long format is required for NLTE calculations. - -Line parameters ---------------- - -The short format fields are - -:species: - A string identifier including the element - and ionization state or the molecule -:atom number: - Identifies the species by the atomic number - (i.e. the number of protons) -:ionization: The ionization state of the species, where 1 is neutral (?) -:wlcent: The central wavelength of the line in Angstrom -:excit: The excitation energy in ? -:gflog: - The log of the product of the statistical weight of - the lower level and the oscillator strength for the transition. -:gamrad: The radiation broadening parameter -:gamqst: A broadening parameter -:gamvw: van der Waals broadening parameter -:lande: The lande factor -:depth: An arbitrary depth estimation of the line -:reference: A citation where this data came from - -In addition the long format has the following fields - -:lande_lower: The lower Lande factor -:lande_upper: The upper Lande factor -:j_lo: The spin of the lower level -:j_up: The spin of the upper level -:e_upp: The energy of the upper level -:term_lower: The electron configuration of the lower level -:term_upper: The electron configuration of the upper level -:error: An uncertainty estimate for this linedata - -Important Note --------------- -As far as the radiative transfer code is concerned the ionization is defined as part of the species term. -I.e. a line with species = "Fe 2" will be calculated as ionization = 2. -If no number is set within the species field, SME will use an ionization of 1. - -Also atom_number is ignored in the radiative transfer calculations and therefore does not need to be set. - -VALD integration ----------------- - -PySME is designed to be used in combination with -VALD3 (https://vald.astro.uu.se/). The easiest way to -get a linelist into PySME is therefore to use VALD -extract stellar, as that can be directly imported -using the ValdFile class. diff --git a/docs/usage/nlte.md b/docs/usage/nlte.md deleted file mode 100644 index 2e7f91d6..00000000 --- a/docs/usage/nlte.md +++ /dev/null @@ -1,66 +0,0 @@ -# NLTE - -Non Local Thermal Equilibrium (NLTE) calculations are important to accuarately fit certain lines. -PySME supports them using pre-computed grids of NLTE departure coefficients, which need to be created for -every element. For common elements PySME provides grids via the LFS -(see [](lfs)). If any of these grids are used, please kindly take care to cite the papers describing the NLTE models -and departure coefficient calculations. - -If you want to provide your own NLTE grid files, they should be present in `~/.sme/nlte_grids`. - -NLTE calculations need to be specified for each element they are -supposed to be used for individually using `sme.nlte.set_nlte(el, grid)` (the `grid` can be omitted if there is a grid in lfs). -Similarly they can be disabled for each element using -`sme.nlte.remove_nlte(el)`, where sme is your SME structure. -If no element is set to NLTE in the structure PySME will perform -LTE calculations only. - -```{warning} -Long format VALD linelist is required for NLTE calculations. -If only a short format has been given, then the calculations will -only be in LTE as well. (See [](linelist)) -``` - -Currently PySME supports the following NLTE grids in default: - -```{raw} html - -``` - -```{warning} -The NLTE grids are only compatible with the MARCS model atmosphere. -``` - -The NLTE object has the following fields - -- `elements`: The elements for which NLTE has been activated -- `grids`: The grid file that is used for each active element -- `subgrid_size`: A small segment of the NLTE grid will be cached in memory - to speed up calculations. This sets the size of that cache - by defining the number of points in each - axis (rabund, teff, logg, monh). -- `flags`: After the synthesis all lines are flaged if they used NLTE - - -## Grid interpolation - - -The grid has 6 dimensions. - -- teff: Effective Temperature -- logg: Surface Gravity -- monh: Overall Metallicity -- rabund: relative abundance of that element -- depth: optical depth in the atmosphere -- departure coefficients: - The NLTE departure coefficients describing how much - it varies from the LTE calculation - -We then perform linear interpolation to the stellar parameters -we want to model. And we then perform a cubic spline fit to the depth scale -of the model atmosphere we specified (See [](atmosphere)). - -We then use the linelist to find only the relevant transitions in the grid, -and pass the departure coefficients for each line to the C library. \ No newline at end of file diff --git a/docs/usage/quickstart.md b/docs/usage/quickstart.md deleted file mode 100644 index fdf2d6fc..00000000 --- a/docs/usage/quickstart.md +++ /dev/null @@ -1,125 +0,0 @@ -# Quickstart - -## SME Structure - -The first step in each SME project is to create an SME structure - -```py -from pysme.sme import SME_Structure -``` - -This can be done in done in a few different ways: -- assign values manually: `sme = SME_Structure()` -- load an existing SME save file (from Python or IDL): `sme = SME_Structure.load("sme.inp")` -- load an .ech file spectrum: `sme = SME_Structure.load("obs.ech")` - - -## Synthesize a spectrum - -Once the SME structure is created, it can be used to synthesize a spectrum. -First we need to define necessary parameters: -* Stellar parameters (effective temperature `teff`, surface gravity `logg`, metallicity `monh`, chemical abundance `abund`) -```py -from pysme.abund import Abund -sme.teff, sme.logg, sme.monh = 5700, 4.4, -0.1 -sme.abund = Abund.solar() -``` -* LineList (linelist), e.g. from [VALD database](https://vald.astro.uu.se/) -```py -from pysme.linelist.vald import ValdFile -vald = ValdFile("linelist.lin") -sme.linelist = vald -``` -* Wavelength grid or wavelength range -```py -import numpy as np -sme.wave = [np.arange(6436, 6440, 0.1), np.arange(6442, 6443, 0.1)] -# Or -sme.wran = [[6436, 6440], [6442, 6443]] -``` -* Optional: provide the transfer grid used by SMElib -```py -# single segment -sme.wint = np.arange(6436, 6440, 0.02) -# multi-segment -sme.wint = [np.arange(6436, 6440, 0.02), np.arange(6442, 6443, 0.02)] -``` - -Then use the `synthesize_spectrum` function: -```py -from pysme.synthesize import synthesize_spectrum -sme = synthesize_spectrum(sme) -``` - -The synthesized spectra are stored in `sme.wave` and `sme.synth`: -```py -Iliffe_vector([array([6436. , 6436.1, 6436.2, ..., 6439.8, 6439.9]), - array([6442. , 6442.1, 6442.2, ... 6442.8, 6442.9])]) -Iliffe_vector([array([0.99986606, 0.99984309, 0.99980888, ..., 0.99754268, 0.99807395]), - array([0.99983848, 0.99985176, 0.99986281, ..., 0.99979064, 0.99471954])]) -``` - -## Fit an observed spectrum - -Assuming that we have an observed spectrum, with its wavelength, normalized flux, and uncertainties, as an array of `wave`, `flux` and `uncertainties`. - -They can be inserted into the SME structure with: -```py -sme.wave = wave -sme.spec = flux -sme.uncs = uncertainties -sme.mask = np.ones(len(wave), dtype=int) -``` - -- The wavelength is always given in Angstrom. -- Note that the observation may be split into segments (orders etc). - - Then Wavelength is a list of arrays [segment1, segment2, ...], and the same applies to spec, uncs, and mask. -- Segment-aware inputs include: `wave`, `spec`, `uncs`, `mask`, and `wint`. -- Global (non-segmented) inputs include: `vmic`, `vmac`, and `vsini`. -- The mask values are: 0: bad pixel, 1: line pixel, 2: continuum pixel, 4: vrad pixel - - The masks are additive, i.e., you can set mask value to 5 for line and vrad pixel. - - Note that the dtype of sme.mask must be int. - -Then the `solve` function can be used to find the best fit solution: -```py -from pysme.solve import solve -# for more details on the fitparameter option, see fitparameters -fitparameters = ["teff", "logg", "monh", "abund Mg"] -sme = solve(sme, fitparameters) -``` - -## NLTE correction - -The non-Local Thermal Equilibrium (NLTE) correction can be applied to the spectrum by setting the `nlte` attribute of the SME structure: -```py -# SME also comes with a few NLTE grids, see NLTE section -# The current NLTE grid is only applicable to the MARCS model! -sme.nlte.set_nlte("Ca") -``` -```{note} -Upon the first use of the NLTE correction, the NLTE grid will be downloaded from the server and this may takes a while, depending on the size of the NLTE grid. -``` - -The results in the output sme structure can, for example, be plotted using the gui module (under development). -```py -from gui import plot_plotly -fig = plot_plotly.FinalPlot(sme) -fig.save(filename="sme.html") -``` - -```{raw} html - -``` - -## Save and Load - -The SME structure can be loaded with -```py -sme = SME_Structure.load("in.sme") -``` -or saved with -```py -sme.save("out.sme") -``` diff --git a/docs/usage/quickstart_old.md b/docs/usage/quickstart_old.md deleted file mode 100644 index 5f42de0c..00000000 --- a/docs/usage/quickstart_old.md +++ /dev/null @@ -1,95 +0,0 @@ -# Quickstart - -## SME Structure - -The first step in each SME project is to create an SME structure - -```py -from pysme.sme import SME_Structure -``` - -This can be done in done in a few different ways: -- load an existing SME save file (from Python or IDL): `sme = SME_Structure.load("sme.inp")` -- load an .ech file spectrum: `sme = SME_Structure.load("obs.ech")` -- assign values manually: `sme = SME_Structure()` - -Either way one has to make sure that a few essential properties are set in the object, those are: - * Stellar parameters (teff, logg, monh, abund) - >>> from pysme.abund import Abund - >>> sme.teff, sme.logg, sme.monh = 5700, 4.4, -0.1 - >>> sme.abund = Abund.solar() - * LineList (linelist), e.g. from VALD - >>> from pysme.linelist.vald import ValdFile - >>> vald = ValdFile("linelist.lin") - >>> sme.linelist = vald - * Atmosphere (atmo), the file has to be in PySME/src/sme/atmospheres - >>> # SME comes with a few model atmospheres see Atmosphere section - >>> sme.atmo.source = "marcs2012p_t1.0.sav" - >>> sme.atmo.method = "grid" - >>> sme.atmo.geom = "PP" - -If no wavelength grid (sme.wave) is set, one has to set the wavelength range: - * Wavelength range(s) in Ångstrom - >>> sme.wran = [[4500, 4600], [5200, 5400]] - -Furthermore for fitting to an observation an observation is required: - * Wavelength wave - >>> # The observation may be split into segments (orders etc) - >>> # Then Wavelength is a list of arrays [segment1, segment2, ...] - >>> # The same applies to spec, uncs, and mask - >>> # The wavelength is always given in Angstrom - >>> sme.wave = Wavelength - * Spectrum spec - >>> sme.spec = Spectrum - * Uncertainties uncs - >>> sme.uncs = Uncertainties - * Mask mask - >>> # The mask values are: 0: bad pixel, 1: line pixel, 2: continuum pixel, 4: vrad pixel - >>> # The masks are additive, i.e., you can set mask value to 5 for line and vrad pixel. - >>> # Note that the dtype of sme.mask must be int. - >>> sme.mask = np.ones(len(Spectrum), dtype=int) - * radial velocity and continuum flags - >>> # possible values are: "each", "whole", "fix", "none" - >>> # "each": Each segment is fitted individually - >>> # "whole": All segments are fit with the same radial velocity - >>> # "fix": use the set radial velocity - >>> # "none": Apply no radial velocity offset - >>> sme.vrad_flag = "whole" - >>> # possible values are: "constant", "linear", "fix", "none" - >>> # "constant": Scale the synthetic spectrum by a constant - >>> # "linear": Scale the synthetic spectrum by a linear polynomial - >>> # "fix": Use the set continnuum scale - >>> # "none": apply no continuum correction - >>> sme.cscale_flag = "linear" - >>> # possible values are: "whole", "mask" - >>> # "whole": use MCMC to match the synthetic to the observed spectrum - >>> # "mask": use the continuum mask points to fit the continuum - >>> sme.cscale_type = "mask" - -Optionally the following can be set: - * NLTE nlte for non local thermal equilibrium calculations - >>> # SME also comes with a few NLTE grids, see NLTE section - >>> # The NLTE grid is atmosphere model dependant! - >>> sme.nlte.set_nlte("Ca", "marcs2012p_t1.0_Ca.grd") - -Once the SME structure is prepared, SME can be run in one of its two modes: - 1. Synthesize a spectrum - >>> from sme.solve import synthesize_spectrum - >>> sme = synthesize_spectrum(sme) - 2. Finding the best fit (least squares) solution - >>> from sme.solve import solve - >>> # for more details on the fitparameter option, see fitparameters - >>> fitparameters = ["teff", "logg", "monh", "abund Mg"] - >>> sme = solve(sme, fitparameters) - -The results will be contained in the output sme structure. These can for example be plotted using the gui module. - >>> from gui import plot_plotly - >>> fig = plot_plotly.FinalPlot(sme) - >>> fig.save(filename="sme.html") - -.. raw:: html - :file: ../_static/sun.html - -or saved with - >>> sme.save("out.npy") - From 8485d679db556aa632df60402251b7e5a115909d Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 16 Feb 2026 20:44:17 +0900 Subject: [PATCH 18/20] make find_strong_line more clean --- docs/concepts/sme_struct.md | 3 +- src/pysme/linelist/linelist.py | 9 +- src/pysme/sme.py | 3 +- src/pysme/synthesize.py | 200 ++++++++++++++++++++------------- 4 files changed, 130 insertions(+), 85 deletions(-) diff --git a/docs/concepts/sme_struct.md b/docs/concepts/sme_struct.md index edb2dd23..8e567cfc 100644 --- a/docs/concepts/sme_struct.md +++ b/docs/concepts/sme_struct.md @@ -147,8 +147,7 @@ For more information see [system_info](../concepts/system_info.md). :system_info: The system information object. It replaces the idlver object. -Other Parameters ----------------- +## Other Parameters :gam6: van der Waals scaling factor (usually 1) :h2broad: flag determing whether to use H2 broadening or not (usually True) diff --git a/src/pysme/linelist/linelist.py b/src/pysme/linelist/linelist.py index 8bad7f4c..7e3e5d79 100644 --- a/src/pysme/linelist/linelist.py +++ b/src/pysme/linelist/linelist.py @@ -220,7 +220,14 @@ def __init__(self, linedata=None, lineformat="short", medium=None, **kwargs): #:pandas.DataFrame: DataFrame that contains all the data self._lines = linedata # should have all the fields (20) self.cdr_paras = None - self.cdr_paras_thres = {'teff':250, 'logg':0.5, 'monh':0.5, 'vmic':1} + self.cdr_paras_thres = { + 'teff': 250, + 'logg': 0.5, + 'monh': 0.5, + 'vmic': 1, + 'strong_depth': 0.001, + 'strong_bin_width': 0.2, + } if medium in ["air", "vac", None]: self._medium = medium else: diff --git a/src/pysme/sme.py b/src/pysme/sme.py index 801b8fea..61af7118 100644 --- a/src/pysme/sme.py +++ b/src/pysme/sme.py @@ -301,7 +301,8 @@ def __init__(self, **kwargs): self.cdr_parallel = True self.cdr_n_jobs = 10 self.cdr_pysme_out = False - self.cdr_depth_thres = 0.0 + self.strong_depth_thres = 0.001 + self.strong_bin_width = 0.2 self.tdnlte_H = False # self.tdnlte_H_new = False diff --git a/src/pysme/synthesize.py b/src/pysme/synthesize.py index fa4605db..fee4747b 100644 --- a/src/pysme/synthesize.py +++ b/src/pysme/synthesize.py @@ -706,12 +706,53 @@ def synthesize_spectrum( elif linelist_mode not in ("all", "dynamic"): raise ValueError("linelist_mode must be one of: 'all', 'dynamic'") - # Calculate the line central depth and line range if necessary + # Calculate line properties and strong-line flags if necessary. if linelist_mode == 'dynamic': # logger.info(f'linelist mode: {linelist_mode}') - if sme.linelist.cdr_paras is None or not {'central_depth', 'line_range_s', 'line_range_e'}.issubset(sme.linelist._lines.columns) or np.abs(sme.linelist.cdr_paras[0]-sme.teff) >= sme.linelist.cdr_paras_thres['teff'] or (np.abs(sme.linelist.cdr_paras[1]-sme.logg) >= sme.linelist.cdr_paras_thres['logg']) or (np.abs(sme.linelist.cdr_paras[2]-sme.monh) >= sme.linelist.cdr_paras_thres['monh']) or cdr_create: - logger.info(f'Updating linelist central depth and line range.') - sme = self.update_cdr(sme, cdr_database=cdr_database, cdr_create=cdr_create, show_progress_bars=show_progress_bars) + need_update_cdr = ( + sme.linelist.cdr_paras is None + or not {'central_depth', 'line_range_s', 'line_range_e'}.issubset(sme.linelist._lines.columns) + or np.abs(sme.linelist.cdr_paras[0] - sme.teff) >= sme.linelist.cdr_paras_thres['teff'] + or np.abs(sme.linelist.cdr_paras[1] - sme.logg) >= sme.linelist.cdr_paras_thres['logg'] + or np.abs(sme.linelist.cdr_paras[2] - sme.monh) >= sme.linelist.cdr_paras_thres['monh'] + or cdr_create + ) + if need_update_cdr: + logger.info('Updating linelist central depth and line range.') + sme = self.update_cdr( + sme, + cdr_database=cdr_database, + cdr_create=cdr_create, + show_progress_bars=show_progress_bars, + ) + + strong_depth_prev = sme.linelist.cdr_paras_thres.get('strong_depth') + strong_bin_width_prev = sme.linelist.cdr_paras_thres.get('strong_bin_width') + strong_depth_matches = ( + strong_depth_prev is not None + and np.isclose(float(strong_depth_prev), float(sme.strong_depth_thres)) + ) + strong_bin_width_matches = ( + strong_bin_width_prev is not None + and np.isclose(float(strong_bin_width_prev), float(sme.strong_bin_width)) + ) + need_update_strong = ( + need_update_cdr + or 'strong' not in sme.linelist._lines.columns + or not strong_depth_matches + or not strong_bin_width_matches + ) + + if need_update_strong: + strong_mask = self.flag_strong_lines_by_bins( + sme.linelist['wlcent'], + sme.linelist['central_depth'], + bin_width=sme.strong_bin_width, + threshold=sme.strong_depth_thres, + ) + sme.linelist._lines['strong'] = np.asarray(strong_mask, dtype=bool) + sme.linelist.cdr_paras_thres['strong_depth'] = float(sme.strong_depth_thres) + sme.linelist.cdr_paras_thres['strong_bin_width'] = float(sme.strong_bin_width) # Input Model data to C library dll.SetLibraryPath() @@ -722,11 +763,7 @@ def synthesize_spectrum( v_broad = np.sqrt(sme.vmac**2 + sme.vsini**2 + (clight/sme.ipres)**2) for i in range(sme.nseg): line_indices |= (sme.linelist['line_range_e'] > sme.wran[i][0] * (1 - vbroad_expend_ratio*v_broad/clight)) & (sme.linelist['line_range_s'] < sme.wran[i][1] * (1 + vbroad_expend_ratio*v_broad/clight)) - line_indices &= self.flag_strong_lines_by_bins( - sme.linelist['wlcent'], - sme.linelist['central_depth'], - threshold=sme.cdr_depth_thres, - ) + line_indices &= np.asarray(sme.linelist['strong'], dtype=bool) sme.linelist._lines['use_indices'] = line_indices linelist_for_smelib = sme.linelist[line_indices] line_ion_mask = dll.InputLineList(linelist_for_smelib) @@ -745,7 +782,8 @@ def synthesize_spectrum( self.flag_strong_lines_by_bins( linelist_for_smelib["wlcent"], linelist_for_smelib["central_depth"], - threshold=sme.cdr_depth_thres, + bin_width=sme.strong_bin_width, + threshold=sme.strong_depth_thres, ), dtype=np.uint8, ) @@ -969,7 +1007,7 @@ def synthesize_segment( # ipres_segment = sme.ipres if np.size(sme.ipres) == 1 else sme.ipres[segment] # if ipres_segment != 0: # del_wav += sme.linelist['wlcent'] / ipres_segment - # indices = (~((sme.linelist['line_range_e'] < wbeg - del_wav - line_margin) | (sme.linelist['line_range_s'] > wend + del_wav + line_margin))) & (sme.linelist['central_depth'] > sme.cdr_depth_thres) + # indices = (~((sme.linelist['line_range_e'] < wbeg - del_wav - line_margin) | (sme.linelist['line_range_s'] > wend + del_wav + line_margin))) & (sme.linelist['central_depth'] > sme.strong_depth_thres) # # logger.info(f"There are {len(sme.linelist[indices][np.char.find(sme.linelist[indices]['species'], 'Fe') >= 0])} Fe lines in sub linelist.") # _ = dll.InputLineList(sme.linelist[indices]) # sme.linelist._lines['use_indices'] = indices @@ -1102,81 +1140,81 @@ def update_cdr(self, sme, cdr_database=None, cdr_create=False, cdr_grid_overwrit N_line_chunk, parallel, n_jobs, pysme_out = sme.cdr_N_line_chunk, sme.cdr_parallel, sme.cdr_n_jobs, sme.cdr_pysme_out self.update_cdr_switch = True + try: + # Decide how many chunks to be divided + N_chunk = int(np.ceil(len(sme.linelist) / N_line_chunk)) - # Decide how many chunks to be divided - N_chunk = int(np.ceil(len(sme.linelist) / N_line_chunk)) - - # Divide the line list to sub line lists - sub_linelist = [sme.linelist[N_line_chunk*i:N_line_chunk*(i+1)] for i in range(N_chunk)] + # Divide the line list to sub line lists + sub_linelist = [sme.linelist[N_line_chunk*i:N_line_chunk*(i+1)] for i in range(N_chunk)] - if sum(len(item) for item in sub_linelist) != len(sme.linelist): - raise ValueError - - if cdr_database is not None: - # cdr_database is provided, use it to update the central depth and line range - self._interpolate_or_compute_and_update_linelist(sme, cdr_database, cdr_create=cdr_create, cdr_grid_overwrite=cdr_grid_overwrite, mode=mode, dims=dims, show_progress_bars=show_progress_bars) - return sme - - logger.info('[cdr] Using calculation to update central depth and line range.') - sub_sme_init = SME_Structure() - exclude_keys = ['_wave', '_synth', '_spec', '_uncs', '_mask', '_SME_Structure__wran', '_normalize_by_continuum', '_specific_intensities_only', '_telluric', '__cont', '_linelist', '_fitparameters', '_fitresults'] - for key, value in sme.__dict__.items(): - if key not in exclude_keys and 'cscale' not in key and 'vrad' not in key: - setattr(sub_sme_init, key, deepcopy(value)) - sub_sme_init.wave = np.arange(5000, 5010, 1) - - if not parallel: - for i in tqdm(range(N_chunk), disable=not show_progress_bars): - sub_sme_init.linelist = sub_linelist[i] - sub_sme_init = self.synthesize_spectrum(sub_sme_init) - if i == 0: - stack_linelist = deepcopy(sub_sme_init.linelist) - else: - stack_linelist._lines = pd.concat([stack_linelist._lines, sub_sme_init.linelist._lines]) - else: - sub_sme = [] - sub_sme_init.linelist = sme.linelist[:1] - sub_sme_init = self.synthesize_spectrum(sub_sme_init) - for i in range(N_chunk): - sub_sme.append(deepcopy(sub_sme_init)) - sub_sme[i].linelist = sub_linelist[i] - - if pysme_out: - sub_sme = pqdm(sub_sme, self.synthesize_spectrum, n_jobs=n_jobs, disable=not show_progress_bars) - else: - with redirect_stdout(open(f"/dev/null", 'w')): - sub_sme = pqdm(sub_sme, self.synthesize_spectrum, n_jobs=n_jobs, disable=not show_progress_bars) + if sum(len(item) for item in sub_linelist) != len(sme.linelist): + raise ValueError - for i in range(N_chunk): - sub_linelist[i] = sub_sme[i].linelist - stack_linelist = deepcopy(sub_linelist[0]) - stack_linelist._lines = pd.concat([ele._lines for ele in sub_linelist]) - # logger.info(f'{sub_linelist}') - - # Remove - if len(stack_linelist) != len(sme.linelist): - raise ValueError - for column in ['central_depth', 'line_range_s', 'line_range_e']: - if column in sme.linelist.columns: - sme.linelist._lines = sme.linelist._lines.drop(column, axis=1) - for column in ['central_depth', 'line_range_s', 'line_range_e']: - sme.linelist._lines[column] = stack_linelist._lines[column] - # pickle.dump([sme.linelist._lines, stack_linelist._lines], open('linelist.pkl', 'wb')) - - # Manually change the depth of all H 1 lines to 1, to include them back. - sme.linelist._lines.loc[sme.linelist['species'] == 'H 1', 'central_depth'] = 1 - - # Manually change the 2000 line_range to 0.03. - indices = np.isclose(sme.linelist['line_range_e'] - sme.linelist['line_range_s'], 2000, rtol=1e-4, atol=5, equal_nan=False) - sme.linelist._lines.loc[indices, 'line_range_s'] = sme.linelist._lines.loc[indices, 'wlcent']-0.3 - sme.linelist._lines.loc[indices, 'line_range_e'] = sme.linelist._lines.loc[indices, 'wlcent']+0.3 - - # Write the stellar parameters used here to the line list - sme.linelist.cdr_paras = np.array([sme.teff, sme.logg, sme.monh, sme.vmic]) + if cdr_database is not None: + # cdr_database is provided, use it to update the central depth and line range + self._interpolate_or_compute_and_update_linelist(sme, cdr_database, cdr_create=cdr_create, cdr_grid_overwrite=cdr_grid_overwrite, mode=mode, dims=dims, show_progress_bars=show_progress_bars) + return sme + + logger.info('[cdr] Using calculation to update central depth and line range.') + sub_sme_init = SME_Structure() + exclude_keys = ['_wave', '_synth', '_spec', '_uncs', '_mask', '_SME_Structure__wran', '_normalize_by_continuum', '_specific_intensities_only', '_telluric', '__cont', '_linelist', '_fitparameters', '_fitresults'] + for key, value in sme.__dict__.items(): + if key not in exclude_keys and 'cscale' not in key and 'vrad' not in key: + setattr(sub_sme_init, key, deepcopy(value)) + sub_sme_init.wave = np.arange(5000, 5010, 1) + + if not parallel: + for i in tqdm(range(N_chunk), disable=not show_progress_bars): + sub_sme_init.linelist = sub_linelist[i] + sub_sme_init = self.synthesize_spectrum(sub_sme_init) + if i == 0: + stack_linelist = deepcopy(sub_sme_init.linelist) + else: + stack_linelist._lines = pd.concat([stack_linelist._lines, sub_sme_init.linelist._lines]) + else: + sub_sme = [] + sub_sme_init.linelist = sme.linelist[:1] + sub_sme_init = self.synthesize_spectrum(sub_sme_init) + for i in range(N_chunk): + sub_sme.append(deepcopy(sub_sme_init)) + sub_sme[i].linelist = sub_linelist[i] - self.update_cdr_switch = False + if pysme_out: + sub_sme = pqdm(sub_sme, self.synthesize_spectrum, n_jobs=n_jobs, disable=not show_progress_bars) + else: + with redirect_stdout(open(f"/dev/null", 'w')): + sub_sme = pqdm(sub_sme, self.synthesize_spectrum, n_jobs=n_jobs, disable=not show_progress_bars) + + for i in range(N_chunk): + sub_linelist[i] = sub_sme[i].linelist + stack_linelist = deepcopy(sub_linelist[0]) + stack_linelist._lines = pd.concat([ele._lines for ele in sub_linelist]) + # logger.info(f'{sub_linelist}') + + # Remove + if len(stack_linelist) != len(sme.linelist): + raise ValueError + for column in ['central_depth', 'line_range_s', 'line_range_e']: + if column in sme.linelist.columns: + sme.linelist._lines = sme.linelist._lines.drop(column, axis=1) + for column in ['central_depth', 'line_range_s', 'line_range_e']: + sme.linelist._lines[column] = stack_linelist._lines[column] + # pickle.dump([sme.linelist._lines, stack_linelist._lines], open('linelist.pkl', 'wb')) + + # Manually change the depth of all H 1 lines to 1, to include them back. + sme.linelist._lines.loc[sme.linelist['species'] == 'H 1', 'central_depth'] = 1 + + # Manually change the 2000 line_range to 0.03. + indices = np.isclose(sme.linelist['line_range_e'] - sme.linelist['line_range_s'], 2000, rtol=1e-4, atol=5, equal_nan=False) + sme.linelist._lines.loc[indices, 'line_range_s'] = sme.linelist._lines.loc[indices, 'wlcent']-0.3 + sme.linelist._lines.loc[indices, 'line_range_e'] = sme.linelist._lines.loc[indices, 'wlcent']+0.3 + + # Write the stellar parameters used here to the line list + sme.linelist.cdr_paras = np.array([sme.teff, sme.logg, sme.monh, sme.vmic]) - return sme + return sme + finally: + self.update_cdr_switch = False def _interpolate_or_compute_and_update_linelist( self, sme, cdr_database, cdepth_decimals=4, cdepth_thres=0, From a5ea3eb7bbd74af3b69f4699ea988eac631b4749 Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 16 Feb 2026 20:52:27 +0900 Subject: [PATCH 19/20] freeze v0.6.23 to SMElib v6.13.12 --- docs/advance/fordev.md | 3 ++- docs/getting_started/installation.md | 3 ++- src/pysme/smelib/libtools.py | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/advance/fordev.md b/docs/advance/fordev.md index 51550436..e78ce2c7 100644 --- a/docs/advance/fordev.md +++ b/docs/advance/fordev.md @@ -70,7 +70,8 @@ The follwing table shows the version matching between SMElib and PySME. |PySME version|SMElib release version|SMElib version| |:--:|:--:|:--:| -|v0.5.0-|latest (v6.13.x)|6.13 (June 2025)| +|v0.7.0-|latest (v6.13.x)|6.13 (June 2025)| +|v0.6.23|v6.13.12 (freezed)|6.13 (June 2025)| |v0.4.199|v6.0.6 (freezed)|6.03 (July 2019)| |v0.4.167-v0.4.198|v6.0.6 (not freezed)|6.03 (July 2019)| diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md index b62588f4..9f806b0d 100644 --- a/docs/getting_started/installation.md +++ b/docs/getting_started/installation.md @@ -3,7 +3,8 @@ PySME can be installed through PyPI (recommended; stable release) or from github (the latest version in `develop` branch) directly. ```{admonition} Supported environments: -- Platforms: Linux, macOS +- Platforms: Linux, macOS (arm platform) + - The x86/Intel platform macOS is not supported anymore, but you can still install v0.6.23, the last supported PySME version, or download [SMElib](https://github.com/MingjieJian/SMElib) and compile it manually. - Windows: supported via WSL2 (install/run PySME inside the Linux subsystem) - Python versions: - 3.9–3.13. diff --git a/src/pysme/smelib/libtools.py b/src/pysme/smelib/libtools.py index 90696895..9b5b7dfc 100644 --- a/src/pysme/smelib/libtools.py +++ b/src/pysme/smelib/libtools.py @@ -25,6 +25,7 @@ smelib_releases = { "default": "latest/download", + "0.6.23": "download/v6.13.12", "0.4.198": "download/v6.0.6", "0.4.199": "download/v6.0.6", } From 33d1e5e78b790821a2d11b853214d81b6ae294bb Mon Sep 17 00:00:00 2001 From: Mingjie Jian Date: Mon, 16 Feb 2026 22:22:28 +0900 Subject: [PATCH 20/20] drop GA make for x86 platform macOS and bug fix --- .github/workflows/python-app.yml | 2 +- src/pysme/continuum_and_radial_velocity.py | 17 ++++++++++------- test/test_atmospheres.py | 2 -- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 4e0466b6..dad9febe 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-15, macos-13] # macos-15/14=arm64,macos-13=x86_64 + os: [ubuntu-latest, macos-15] # macos-15/14=arm64,macos-13=x86_64 py: ['3.9','3.10','3.11','3.12','3.13'] name: py${{ matrix.py }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} diff --git a/src/pysme/continuum_and_radial_velocity.py b/src/pysme/continuum_and_radial_velocity.py index 958af6df..eebfe68d 100644 --- a/src/pysme/continuum_and_radial_velocity.py +++ b/src/pysme/continuum_and_radial_velocity.py @@ -322,7 +322,7 @@ def __call__( if sme.cscale is not None: cscale = sme.cscale[segments] else: - cscale = np.zeros(nseg, ndeg + 1) + cscale = np.zeros((nseg, ndeg + 1)) for i, seg in enumerate(segments): cscale[i, -1] = np.nanpercentile(y_obs[seg], 95) @@ -1199,18 +1199,21 @@ def match_rv_continuum(sme, segments, x_syn, y_syn): else: if sme.cscale_type == "mcmc": for s in segments: - ( - vrad[s], - vrad_unc[s], - cscale[s], - cscale_unc[s], - ) = continuum_normalization( + rv_i, rv_unc_i, cscale_i, cscale_unc_i = continuum_normalization( sme, x_syn[s], y_syn[s], s, rvel=vrad[s], ) + # MCMC returns arrays even for one segment; normalize them to row/scalar. + cscale_row = np.asarray(cscale_i, dtype=float).reshape(1, -1)[0] + vrad[s] = np.asarray(rv_i, dtype=float).reshape(-1)[0] + vrad_unc[s] = np.asarray(rv_unc_i, dtype=float).reshape(1, 2)[0] + cscale[s] = cscale_row + cscale_unc[s] = np.asarray(cscale_unc_i, dtype=float).reshape( + 1, cscale_row.size, 2 + )[0] else: for s in segments: cscale[s] = continuum_normalization( diff --git a/test/test_atmospheres.py b/test/test_atmospheres.py index f4fed997..241907e2 100644 --- a/test/test_atmospheres.py +++ b/test/test_atmospheres.py @@ -23,7 +23,6 @@ def atmosphere(atmosphere_name): @pytest.fixture -@pytest.mark.usefixtures("lfs_atmo") def interpolator(atmosphere, lfs_atmo): interp = AtmosphereInterpolator( depth=atmosphere.depth, @@ -35,7 +34,6 @@ def interpolator(atmosphere, lfs_atmo): @pytest.fixture -@pytest.mark.usefixtures("lfs_atmo") def atmosphere_grid(atmosphere_name, lfs_atmo): name = lfs_atmo.get(atmosphere_name) atmo = SavFile(name, source=name)
    + +

    Installation

    +

    Set up PySME and verify your code before synthesizing.

    + Go to installation +
    + +

    Getting started

    +

    Run the first spectrum and first fit with a minimal, beginner-friendly path.

    + Open getting started +
    + +

    Advanced usage

    +

    Learn core usage and structure details for deeper and more controlled use.

    + To advanced usage +
    +