Repository: radis/radis (language: python)

Issue:
use tuna 🐟  to generate visual/interactive performance profiles
<!-- Please be sure to check out our contributing guidelines,
https://github.com/radis/radis/blob/develop/CONTRIBUTING.md . -->

### Description
<!-- Provide a general description of what your pull request does. -->

use [tuna](https://github.com/nschloe/tuna) to generate visual/interactive performance profiles; and the update the console profiler:


Syntax : 

```
s = calc_spectrum(...)
s.generate_perf_profile()
```


Typical output (opens a local web page) : 

![image](https://user-images.githubusercontent.com/16088743/128018032-6049be72-1881-46ac-9d7c-1ed89f9c4f42.png)

Console profiler:

```
s = calc_spectrum(...)
s.print_perf_profile()
```

Typical output : 

```
        spectrum_calculation      0.844s ████████████████
            check_line_databank              0.001s
            check_non_eq_param               0.070s █
            fetch_energy_5                   0.027s
            calc_weight_trans                0.016s
            reinitialize                     0.003s
                copy_database                    0.000s
                memory_usage_warning             0.003s
                reset_population                 0.000s
            calc_noneq_population            0.066s █
                part_function                    0.056s █
                population                       0.010s
            scaled_non_eq_linestrength       0.004s
                map_part_func                    0.001s
                corrected_population_se          0.003s
            calc_emission_integral           0.008s
            applied_linestrength_cutoff      0.003s
            calc_lineshift                   0.001s
            calc_hwhm                        0.008s
            generate_wavenumber_arrays       0.002s
            calc_line_broadening             0.668s ████████████
                precompute_DLM_lineshapes        0.020s
                DLM_Initialized_vectors          0.000s
                DLM_closest_matching_line        0.001s
                DLM_Distribute_lines             0.002s
                DLM_convolve                     0.304s █████
            calc_other_spectral_quan         0.005s
            generate_spectrum_obj            0.000s
```

### Implementation

- [x] Proof of concept
- [x] Test
- [x] update "profiler" format consistently : @anandxkumar see below 
- [x] mention in docs/performances


@anandxkumar this expects the `conditions["profiler"]` dict to be of the format:  
```python
prof = {'scaled_eq_linestrength': 0.02393484115600586, 'calc_lineshift': 0.002992868423461914, 'calc_hwhm': 0.04986977577209473, 'precompute_DLM_lineshapes': 0.06680488586425781, 'calc_line_broadening': {'value': 1.423218011856079, 'DLM_Initialized_vectors': 0.0, 'DLM_closest_matching_line': 0.048909902572631836, 'DLM_Distribute_lines': 0.052854061126708984, 'DLM_convolve': 1.2426400184631348}, 'calc_other_spectral_quan': 0.03287649154663086, 'spectrum_calc_before_obj': 1.560823678970337, 'value': 1.560823678970337}
```
i.e. (more human-readable with `print(yaml.dump(prof, allow_unicode=True, default_flow_style=False))`
```
calc_hwhm: 0.04986977577209473
calc_line_broadening:
  DLM_Distribute_lines: 0.052854061126708984
  DLM_Initialized_vectors: 0.0
  DLM_closest_matching_line: 0.048909902572631836
  DLM_convolve: 1.2426400184631348
  value: 1.423218011856079              👈  notice the "value"
calc_lineshift: 0.002992868423461914
calc_other_spectral_quan: 0.03287649154663086
precompute_DLM_lineshapes: 0.06680488586425781
scaled_eq_linestrength: 0.02393484115600586
spectrum_calc_before_obj: 1.560823678970337
value: 1.560823678970337          👈  notice the "value"
```

This PR generates the corresponding Python Tree. 

I suggest that you use this PR to also close #332 ; 

- [x] maybe also add a Spectrum method using the `yaml.dump` function above to nicely print the profiler dictionary, adding % etc ? 


Discussion / hints:
This pull request **introduces 1 alert** when merging 240146089fc9b60ce143516152c1f2c059e246cb into 651c4280f0624371c8fb7520ec79a9d3283e8c1c - [view on LGTM.com](https://lgtm.com/projects/g/radis/radis/rev/pr-007e90ad5dde7b59fe4cb7f375eb59c4e0ffce77)

**new alerts:**

* 1 for Unreachable code
# [Codecov](https://codecov.io/gh/radis/radis/pull/325?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=radis) Report
> Merging [#325](https://codecov.io/gh/radis/radis/pull/325?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=radis) (baad162) into [develop](https://codecov.io/gh/radis/radis/commit/f58f5a250ae9c226eec6ddf935a8f048a35da39b?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=radis) (f58f5a2) will **increase** coverage by `0.17%`.
> The diff coverage is `97.39%`.


```diff
@@             Coverage Diff             @@
##           develop     #325      +/-   ##
===========================================
+ Coverage    74.32%   74.49%   +0.17%     
===========================================
  Files          123      124       +1     
  Lines        14892    15007     +115     
===========================================
+ Hits         11068    11180     +112     
- Misses        3824     3827       +3     
```

This pull request **introduces 1 alert** when merging 4b7afd289ef11f23d8b1e29089532c9572b44a02 into 3a960c6baa52e068dfb686c2d4f2e672f7777427 - [view on LGTM.com](https://lgtm.com/projects/g/radis/radis/rev/pr-5d1d67f1c5a338b3e417f1d7930714ffd55db269)

**new alerts:**

* 1 for Unreachable code
This pull request **introduces 1 alert** when merging 4e6df23ca819be1fe927bcc88ef7de56835890f5 into 3a960c6baa52e068dfb686c2d4f2e672f7777427 - [view on LGTM.com](https://lgtm.com/projects/g/radis/radis/rev/pr-137b809be50e4e064deb7003456bfcabaae11707)

**new alerts:**

* 1 for Unreachable code
@erwanp Improper Indentation for verbose level 3 keys :
```
sf = SpectrumFactory(wavenum_min=2900,
                     wavenum_max=4200,
                     molecule='OH',
                     broadening_max_width=10,  # cm-1
                     medium='vacuum',
                     verbose=3,    # more for more details
                     pressure = 10,
                     wstep = 0.01,
                     )
sf.warnings={"AccuracyError":"ignore",
             "MissingSelfBroadeningWarning":"ignore"}
sf.fetch_databank('hitemp')
s1 = sf.eq_spectrum(Tgas=300, path_length=1)
s1.print_perf_profile()
```

Output:
```
        spectrum_calculation  0.646s ████████████████
        check_line_databank         0.000s 
            reinitialize                0.008s 
            copy_database               0.001s 
            memory_usage_warning        0.001s 
            reset_population            0.000s 
        scaled_eq_linestrength      0.003s 
        calc_lineshift              0.001s 
        calc_hwhm                   0.004s 
        generate_wavenumber_arrays  0.003s 
            calc_line_broadening        0.618s ███████████████
            precompute_DLM_lineshapes   0.024s 
            DLM_Initialized_vectors     0.000s 
            DLM_closest_matching_line   0.001s 
            DLM_Distribute_lines        0.001s 
            DLM_convolve                0.591s ██████████████
        calc_other_spectral_quan    0.006s 
        generate_spectrum_obj       0.001s 
 ```
 
`reinitialize` and `calc_line_broadening` should be at the previous level indentation and `spectrum_calculation` should be indented a level behind rest of the keys.

Final output be like:
```
        spectrum_calculation  0.646s ████████████████
            check_line_databank         0.000s 
            reinitialize                0.008s 
                copy_database               0.001s 
                memory_usage_warning        0.001s 
                reset_population            0.000s 
            scaled_eq_linestrength      0.003s 
            calc_lineshift              0.001s 
            calc_hwhm                   0.004s 
            generate_wavenumber_arrays  0.003s 
            calc_line_broadening        0.618s ███████████████
                precompute_DLM_lineshapes   0.024s 
                DLM_Initialized_vectors     0.000s 
                DLM_closest_matching_line   0.001s 
                DLM_Distribute_lines        0.001s 
                DLM_convolve                0.591s ██████████████
            calc_other_spectral_quan    0.006s 
            generate_spectrum_obj       0.001s 
 ```
Good catch. Indentation fixed: 
```
        spectrum_calculation      0.844s ████████████████
            check_line_databank              0.001s
            check_non_eq_param               0.070s █
            fetch_energy_5                   0.027s
            calc_weight_trans                0.016s
            reinitialize                     0.003s
                copy_database                    0.000s
                memory_usage_warning             0.003s
                reset_population                 0.000s
            calc_noneq_population            0.066s █
                part_function                    0.056s █
                population                       0.010s
            scaled_non_eq_linestrength       0.004s
                map_part_func                    0.001s
                corrected_population_se          0.003s
            calc_emission_integral           0.008s
            applied_linestrength_cutoff      0.003s
            calc_lineshift                   0.001s
            calc_hwhm                        0.008s
            generate_wavenumber_arrays       0.002s
            calc_line_broadening             0.668s ████████████
                precompute_DLM_lineshapes        0.020s
                DLM_Initialized_vectors          0.000s
                DLM_closest_matching_line        0.001s
                DLM_Distribute_lines             0.002s
                DLM_convolve                     0.304s █████
            calc_other_spectral_quan         0.005s
            generate_spectrum_obj            0.000s
```

Fix patch:
diff --git a/MANIFEST.in b/MANIFEST.in
index 80372e7f3..c2b925364 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,6 +9,7 @@ include radis/test/files/*.spec
 include radis/test/files/*.par
 include radis/test/files/*.levels
 include radis/db/molparam.txt
+include radis/db/molparams_extra.json
 include radis/default_radis.json
 recursive-include radis/db *.json
 include radis/test/validation/test_CO2_3Tvib_vs_klarenaar_data/*.csv
diff --git a/docs/conf.py b/docs/conf.py
index f95182d6e..c8dad57b4 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -295,7 +295,10 @@ def setup(app):
     "fixed_sidebar": True,
     "analytics_id": "UA-113616205-1",
     "link": "#7A306C",
-    "extra_nav_links": {"RADIS Website": "https://radis.github.io/"},
+    "extra_nav_links": {
+        "RADIS Website": "https://radis.github.io/",
+        "Video Tutorials": "https://www.youtube.com/channel/UCO-7NXkubTAiGGxXmvtQlsA",
+    },
 }
 
 # Add any paths that contain custom themes here, relative to this directory.
diff --git a/docs/lbl/lbl.rst b/docs/lbl/lbl.rst
index da6198898..b488ca594 100644
--- a/docs/lbl/lbl.rst
+++ b/docs/lbl/lbl.rst
@@ -1,8 +1,8 @@
 .. _label_line_by_line:
 
-=========================
-Line-by-line (LBL) module
-=========================
+===================
+Line-by-line module
+===================
 
 This is the core of RADIS: it calculates the spectral densities for a homogeneous
 slab of gas, and returns a :py:class:`~radis.spectrum.spectrum.Spectrum` object.
diff --git a/docs/online/online.rst b/docs/online/online.rst
index 8ccdce950..34cda6af7 100644
--- a/docs/online/online.rst
+++ b/docs/online/online.rst
@@ -4,6 +4,13 @@
 🌱 Try Online
 =============
 
+.. raw:: html
+
+    <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;">
+        <iframe src="https://www.youtube.com/watch?v=r9HX-c1Xwqg" frameborder="0" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
+    </div>
+
+
 radis-app
 =========
 
diff --git a/docs/references/references.rst b/docs/references/references.rst
index 5979d93fc..08eff1ccc 100644
--- a/docs/references/references.rst
+++ b/docs/references/references.rst
@@ -35,7 +35,7 @@ Line-by-line algorithm :
 
 - cite the line-by-line code as [RADIS-2018]_ |badge_article1|
 - if using the default optimization, cite the new spectral synthesis algorithm [Spectral-Synthesis-Algorithm]_ |badge_article2|
-- for reproducibility, mention the RADIS version number. Get your version with :py:func:`~radis.get_version`
+- for reproducibility, mention the RADIS version number. Get the version with :py:func:`radis.get_version`
   (latest version available is |badge_pypi|) ::
 
     import radis
@@ -60,6 +60,30 @@ Research papers using RADIS and the associated algorithms :
 
 - Papers citing |badge_article2| : https://scholar.google.fr/scholar?cites=17363432006874800849
 
+Conferences
+===========
+
+Talks presenting RADIS features and algorithms, available on the `RADIS Youtube Channel <https://www.youtube.com/channel/UCO-7NXkubTAiGGxXmvtQlsA>`__ :
+
+DIT Algorithm at the ISMS 2021 Conference, by D.v.d. Bekerom :
+
+.. raw:: html
+
+    <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;">
+        <iframe src="https://www.youtube.com/watch?v=SU_tLK8O9is" frameborder="0" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
+    </div>
+
+
+RADIS features and updates at the ASA-HITRAN 2022 Conference, by E. Pannier :
+
+.. raw:: html
+
+    <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;">
+        <iframe src="https://www.youtube.com/watch?v=RhzpZkeufJ8" frameborder="0" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
+    </div>
+
+
+
 Spectroscopy Tutorials
 =====================
 Tutorials for molecular spectroscopy can be found here at https://github.com/radis/spectro101
diff --git a/environment.yml b/environment.yml
index 769090fcb..cbf224e04 100644
--- a/environment.yml
+++ b/environment.yml
@@ -36,6 +36,6 @@ dependencies:
   - json-tricks>=3.15.0  # to deal with non jsonable formats
   - mpldatacursor
   - progressbar2    # used in vaex
-  - tuna           # to generate visual/interactive performance profiles
+  #- tuna           # to generate visual/interactive performance profiles
   - tables  # for pandas to HDF5 export
   - habanero  # CrossRef API to retrieve data from doi
diff --git a/radis/__init__.py b/radis/__init__.py
index 2a8c04ad1..2c8df456e 100644
--- a/radis/__init__.py
+++ b/radis/__init__.py
@@ -103,7 +103,7 @@
 "USE_CYTHON": True
     bool: try to use Cython functions when possible
 
-    See more in : :py:func:`~radis.misc.arrays.add_at`
+    See more in :py:func:`radis.misc.arrays.add_at`
 
 
 "GRIDPOINTS_PER_LINEWIDTH_WARN_THRESHOLD": 3
diff --git a/radis/__version__.txt b/radis/__version__.txt
index 51de3305b..ed0d9e990 100644
--- a/radis/__version__.txt
+++ b/radis/__version__.txt
@@ -1,1 +1,1 @@
-0.13.0
\ No newline at end of file
+0.13.1
\ No newline at end of file
diff --git a/radis/db/classes.py b/radis/db/classes.py
index b7565f982..05a90a0c9 100644
--- a/radis/db/classes.py
+++ b/radis/db/classes.py
@@ -284,9 +284,9 @@ def get_molecule(molecule_id):
 # %% ExoMol molecules
 
 
-from radis import config
+from radis.db.molparam import get_extra_molparams
 
-isotope_full_names = config["molparams"]["isotope_full_name"]
+isotope_full_names = get_extra_molparams()["isotope_full_name"]
 
 EXOMOL_ONLY_ISOTOPES_NAMES = {
     (molecule, int(iso_number)): iso_name
diff --git a/radis/db/molparam.py b/radis/db/molparam.py
index f11d743f8..5b4de6c68 100644
--- a/radis/db/molparam.py
+++ b/radis/db/molparam.py
@@ -160,38 +160,92 @@
 # even if HITRAN eventually changes the conventions and labels.
 
 
-class MolParams(object):
-    __slots__ = ["df", "terrestrial_abundances"]
+#%%
+# Read Extra parameters taken from molparams_extra.json
+# TODO : Refactor : have either .json either .txt, but not both
 
-    def __init__(self, file=None, terrestrial_abundances=True):
-        """Easy access to molecular parameters taken from HITRAN molparam.txt.
+from json import JSONDecodeError
+from os.path import exists, join
 
-        Parameters
-        ----------
-        file: str
-            if None the one in RADIS is taken. See https://github.com/radis/radis/blob/master/radis/db/molparam.txt
+import hjson
 
-        Examples
-        --------
-        Get earth abundance of CO2, isotope 1::
+from radis.misc.utils import getProjectRoot
 
-            from radis.db.molparam import MolParams
-            molpar = MolParams()
-            molpar.get(2, 1, 'abundance')         # 2 for CO2, 1 for isotope 1
+# %% Functions to parse radis/config.json
 
-        .. minigallery:: radis.db.molparam.MolParams
-        :add-heading:
+MOLPARAMS_EXTRA_PATH = join(getProjectRoot(), "db", "molparams_extra.json")
+assert exists(MOLPARAMS_EXTRA_PATH)
 
-        Note
-        ----
-        Isotope number was derived manually assuming the isonames were ordered in the database
-        The isotope name (ex: CO2 626) is kept for comparison if ever needed
 
-        References
-        ----------
-        http://hitran.org/media/molparam.txt
-        """
+def get_extra_molparams(path=MOLPARAMS_EXTRA_PATH):
+    """Read the extra molecular parameters in
+    :py:attr:`~radis.db.molparam.MOLPARAMS_EXTRA_PATH` to complement the
+    HITRAN molecular parameters of molparam.txt"""
 
+    with open(path) as f:
+        try:
+            molparams_dict = hjson.load(f)
+            # read with Hjson to allow comments in MOLPARAMS_EXTRA_PATH
+        except JSONDecodeError as err:
+            raise JSONDecodeError(
+                "Error reading '{0}' (line {2} col {3}): \n{1}".format(
+                    path, err.msg, err.lineno, err.colno
+                ),
+                err.doc,
+                err.pos,
+            ) from err
+
+    return molparams_dict
+
+
+#%%
+
+
+class MolParams(object):
+    """Easy access to molecular parameters taken from HITRAN `molparam.txt`.
+
+    .. note::
+        Starting from Radis 0.13.1 MolParams can also read extra parameters
+        from a .json file
+
+    Parameters
+    ----------
+    file: str
+        if None the one in RADIS is taken. See https://github.com/radis/radis/blob/master/radis/db/molparam.txt
+    extra_file_json: str
+        if not ``None``, read extra molecular parameters from a Json file, for
+        molecules not implemented in HITRAN  `molparam.txt`.
+        See :py:attr:`~radis.db.molparam.MOLPARAMS_EXTRA_PATH`
+
+    Examples
+    --------
+    Get earth abundance of CO2, isotope 1::
+
+        from radis.db.molparam import MolParams
+        molpar = MolParams()
+        molpar.get(2, 1, 'abundance')         # 2 for CO2, 1 for isotope 1
+
+    .. minigallery:: radis.db.molparam.MolParams
+    :add-heading:
+
+    Note
+    ----
+    Isotope number was derived manually assuming the isonames were ordered in the database
+    The isotope name (ex: CO2 626) is kept for comparison if ever needed
+
+    References
+    ----------
+    http://hitran.org/media/molparam.txt
+    """
+
+    __slots__ = ["df", "terrestrial_abundances", "extra_molparams"]
+
+    def __init__(
+        self,
+        file=None,
+        terrestrial_abundances=True,
+        extra_file_json=MOLPARAMS_EXTRA_PATH,
+    ):
         if file is None:
             file = getFile("molparam.txt")
 
@@ -202,6 +256,10 @@ def __init__(self, file=None, terrestrial_abundances=True):
 
         self.df = df
         self.terrestrial_abundances = terrestrial_abundances
+        self.extra_molparams = {}
+
+        if extra_file_json is not None:
+            self.extra_molparams.update(get_extra_molparams(extra_file_json))
 
         # ------
         try:  # Add hints (Python >3.6 only)
@@ -209,6 +267,23 @@ def __init__(self, file=None, terrestrial_abundances=True):
         except AttributeError:
             pass  # old Python version
 
+    def _get_molecule_list(self):
+        """Returns list of [molecule_id, molecule_name] in loaded molparam dataframe
+
+        Examples
+        --------
+        ::
+
+            [1,  'H2O',  2,  'CO2',  3,  'O3', 4, 'N2O',  etc.  ]
+        """
+        from radis.db.classes import get_molecule
+
+        return [
+            item
+            for m in self.df.reset_index(inplace=False)["id"].unique()
+            for item in [m, get_molecule(m)]
+        ]
+
     def get(self, molecule, isotope, key):
         r"""Get attribute of molecule, isotope.
 
@@ -235,15 +310,51 @@ def get(self, molecule, isotope, key):
             :add-heading:
 
         """
+        if key == "mol_mass":  # backward compatibility >=0.13.1
+            key = "molar_mass"
+
+        if key not in self.df.columns:
+            raise ValueError(
+                f"Unknown molecular parameter : {key}. Use one of {self.df.columns}"
+            )
+
         M = molecule
         try:
-            float(M)
-        except ValueError:
-            # not a number
-            from radis.db.classes import get_molecule_identifier
-
-            M = get_molecule_identifier(M)
-        return self.df.loc[(M, isotope), key]
+            try:
+                float(M)
+            except ValueError:
+                # M is not a number (i.e. not the HITRAN molecule id)
+                from radis.db.classes import get_molecule_identifier
+
+                M = get_molecule_identifier(M)
+        except NotImplementedError:
+            # Molecule not in HITRAN . Try to read from extra parameters
+            if key in self.extra_molparams and M in self.extra_molparams[key]:
+                try:
+                    return self.extra_molparams[key][M][str(isotope)]
+                except KeyError:
+
+                    raise NotImplementedError(
+                        f"{key} for isotope `{str(isotope)}` for molecule {M} not supported"
+                        + "\nChoose one of{0}".format(
+                            list(self.extra_molparams[key][M].keys())
+                        )
+                        + f"\nYou can manually add it in the {MOLPARAMS_EXTRA_PATH} file"
+                        + "{'molparams':{'molar_mass':{'molecule':{'ISOTOPE':...}}}}; or in the `SpectrumFactory.molpar.extra_molparams[key][molecule][isotope]` dictionary. Please also report on GitHub so we can update !"
+                    )
+            else:
+                raise NotImplementedError(
+                    f"{key} for molecule '{M}' not supported"
+                    + "\nChoose one of{0}".format(self._get_molecule_list())
+                    + "\nor `\n{0}".format(
+                        list(self.extra_molparams.get(key, {}).keys())
+                    )
+                    + f"\nYou can manually add it in the {MOLPARAMS_EXTRA_PATH} file"
+                    + "{'molparams':{'molar_mass':{'molecule':{'ISOTOPE':...}}}}; or in the `SpectrumFactory.molpar.extra_molparams[key][molecule][isotope]` dictionary. Please also report on GitHub so we can update !"
+                )
+
+        else:
+            return self.df.loc[(M, isotope), key]
 
 
 def _add_exomol_name(df):
diff --git a/radis/db/molparam.txt b/radis/db/molparam.txt
index ab0d74200..885ebbe8b 100644
--- a/radis/db/molparam.txt
+++ b/radis/db/molparam.txt
@@ -13,7 +13,7 @@
 # The isotope AFGL code (ex: CO2 626) is kept for comparison if ever needed
 #
 # -----------------------------------------------------
-id iso isoname abundance     Q_296K      gj    mol_mass
+id iso isoname abundance     Q_296K      gj    molar_mass
 #   H2O (1)
 1  1  161  .997317E+00    1.7464E+02    1     18.010565
 1  2  181  1.99983E-03    1.7511E+02    1     20.014811
diff --git a/radis/db/molparams_extra.json b/radis/db/molparams_extra.json
new file mode 100644
index 000000000..dffc25dd4
--- /dev/null
+++ b/radis/db/molparams_extra.json
@@ -0,0 +1,812 @@
+{  # molecular parameters for non-HITRAN species (the latter being defined in https://github.com/radis/radis/blob/master/radis/db/molparam.txt)
+    "isotope_full_name": {
+        "AlCl": {
+            "1": "27Al-35Cl",
+            "2": "27Al-37Cl"
+        },
+        "AlF": {
+            "1": "27Al-19F"
+        },
+        "AlH": {
+            "1": "27Al-1H",
+            "2": "27Al-2H",
+            "3": "26Al-1H"
+        },
+        "AlO": {
+            "1": "27Al-16O",
+            "2": "27Al-18O",
+            "3": "27Al-17O",
+            "4": "26Al-16O"
+        },
+        "AsH3": {
+            "1": "75As-1H3"
+        },
+        "BeH": {
+            "1": "9Be-1H",
+            "2": "9Be-2H",
+            "3": "9Be-3H"
+        },
+        "C2": {
+            "1": "12C2",
+            "2": "12C-13C",
+            "3": "13C2"
+        },
+        "CH": {
+            "1": "12C-1H",
+            "2": "13C-1H"
+        },
+        "CH3": {
+            "1": "12C-1H3"
+        },
+        "CH3F": {
+            "1": "12C-1H3-19F"
+        },
+        "CN": {
+            "1": "12C-14N",
+            "2": "13C-14N",
+            "3": "12C-15N",
+            "4": "13C-15N"
+        },
+        "CO": {
+            "7": "14C-16O",
+            "8": "14C-18O",
+            "9": "14C-17O"
+        },
+        "CO2": {
+            "13": "13C-17O2"
+        },
+        "CP": {
+            "1": "12C-31P"
+        },
+        "CS": {
+            "5": "13C-34S",
+            "6": "12C-36S",
+            "7": "13C-33S",
+            "8": "13C-36S"
+        },
+        "CaF": {
+            "1": "40Ca-19F",
+            "2": "44Ca-19F",
+            "3": "42Ca-19F",
+            "4": "48Ca-19F",
+            "5": "43Ca-19F",
+            "6": "46Ca-19F"
+        },
+        "CaH": {
+            "1": "40Ca-1H"
+        },
+        "CaO": {
+            "1": "40Ca-16O"
+        },
+        "CrH": {
+            "1": "52Cr-1H"
+        },
+        "FeH": {
+            "1": "56Fe-1H"
+        },
+        "H2_p": {
+            "1": "1H-2H_p"
+        },
+        "H3O_p": {
+            "1": "1H3-16O_p"
+        },
+        "H3_p": {
+            "1": "1H3_p",
+            "2": "1H2-2H_p"
+        },
+        "HeH_p": {
+            "1": "4He-1H_p",
+            "2": "4He-2H_p",
+            "3": "3He-1H_p",
+            "4": "3He-2H_p"
+        },
+        "KCl": {
+            "1": "39K-35Cl",
+            "2": "39K-37Cl",
+            "3": "41K-35Cl",
+            "4": "41K-37Cl"
+        },
+        "KF": {
+            "1": "39K-19F",
+            "2": "41K-19F"
+        },
+        "KOH": {
+            "1": "39K-16O-1H"
+        },
+        "LiCl": {
+            "1": "7Li-35Cl",
+            "2": "7Li-37Cl",
+            "3": "6Li-35Cl",
+            "4": "6Li-37Cl"
+        },
+        "LiF": {
+            "1": "7Li-19F",
+            "2": "6Li-19F"
+        },
+        "LiH": {
+            "1": "7Li-1H"
+        },
+        "LiH_p": {
+            "1": "7Li-1H_p"
+        },
+        "MgF": {
+            "1": "24Mg-19F",
+            "2": "26Mg-19F",
+            "3": "25Mg-19F"
+        },
+        "MgH": {
+            "1": "24Mg-1H",
+            "2": "26Mg-1H",
+            "3": "25Mg-1H"
+        },
+        "MgO": {
+            "1": "24Mg-16O",
+            "2": "26Mg-16O",
+            "3": "25Mg-16O",
+            "4": "24Mg-18O",
+            "5": "24Mg-17O"
+        },
+        "NH": {
+            "1": "14N-1H"
+        },
+        "NO": {
+            "4": "14N-17O",
+            "5": "15N-18O",
+            "6": "15N-17O"
+        },
+        "NS": {
+            "1": "14N-32S",
+            "2": "14N-34S",
+            "3": "14N-33S",
+            "4": "15N-32S",
+            "5": "14N-36S"
+        },
+        "NaCl": {
+            "1": "23Na-35Cl",
+            "2": "23Na-37Cl"
+        },
+        "NaF": {
+            "1": "23Na-19F"
+        },
+        "NaH": {
+            "1": "23Na-1H",
+            "2": "23Na-2H"
+        },
+        "NaOH": {
+            "1": "23Na-16O-1H"
+        },
+        "NiH": {
+            "1": "58Ni-1H",
+            "2": "60Ni-1H",
+            "3": "62Ni-1H"
+        },
+        "OH_p": {
+            "1": "16O-1H_p"
+        },
+        "PF3": {
+            "1": "31P-19F3"
+        },
+        "PH": {
+            "1": "31P-1H"
+        },
+        "PN": {
+            "1": "31P-14N",
+            "2": "31P-15N"
+        },
+        "PO": {
+            "1": "31P-16O"
+        },
+        "PS": {
+            "1": "31P-32S"
+        },
+        "SH": {
+            "1": "32S-1H",
+            "2": "34S-1H",
+            "3": "33S-1H",
+            "4": "32S-2H",
+            "5": "36S-1H"
+        },
+        "ScH": {
+            "1": "45Sc-1H"
+        },
+        "SiH": {
+            "1": "28Si-1H",
+            "2": "29Si-1H",
+            "3": "30Si-1H",
+            "4": "28Si-2H"
+        },
+        "SiH2": {
+            "1": "28Si-1H2"
+        },
+        "SiH4": {
+            "1": "28Si-1H4"
+        },
+        "SiO": {
+            "1": "28Si-16O",
+            "2": "29Si-16O",
+            "3": "30Si-16O",
+            "4": "28Si-18O",
+            "5": "28Si-17O"
+        },
+        "SiO2": {
+            "1": "28Si-16O2"
+        },
+        "SiS": {
+            "1": "28Si-32S",
+            "2": "29Si-32S",
+            "3": "28Si-34S",
+            "4": "30Si-32S",
+            "5": "28Si-33S",
+            "6": "29Si-34S",
+            "7": "30Si-34S",
+            "8": "29Si-33S",
+            "9": "30Si-33S",
+            "10": "28Si-36S",
+            "11": "29Si-36S",
+            "12": "30Si-36S"
+        },
+        "TiH": {
+            "1": "48Ti-1H"
+        },
+        "TiO": {
+            "1": "48Ti-16O",
+            "2": "46Ti-16O",
+            "3": "47Ti-16O",
+            "4": "49Ti-16O",
+            "5": "50Ti-16O"
+        },
+        "VO": {
+            "1": "51V-16O"
+        },
+        "YO": {
+            "1": "89Y-16O"
+        },
+        "cis-P2H2": {
+            "1": "cis-31P2-1H2"
+        },
+        "trans-P2H2": {
+            "1": "trans-31P2-1H2",
+            "2": "trans-31P2-1H-2H"
+        }
+    },
+    "abundance": {
+        "AlCl": {
+            "1": 0.755,
+            "2": 0.239
+        },
+        "AlF": {
+            "1": 1.0
+        },
+        "AlH": {
+            "1": 0.99972,
+            "2": 0.00028,
+            "3": 9.9972e-07
+        },
+        "AlO": {
+            "1": 0.9973799999999999,
+            "2": 0.0022199999999999998,
+            "3": 0.0004,
+            "4": 9.973799999999998e-07
+        },
+        "AsH3": {
+            "1": 0.9991602351780482
+        },
+        "BeH": {
+            "1": 0.99972,
+            "2": 0.00028,
+            "3": "1e-06"
+        },
+        "C2": {
+            "1": 0.9769345599999999,
+            "2": 0.011465439999999999,
+            "3": 0.00013455999999999999
+        },
+        "CH": {
+            "1": 0.988123248,
+            "2": 0.011596752
+        },
+        "CH3": {
+            "1": 0.9875699764499828
+        },
+        "CH3F": {
+            "1": 0.9875699764499828
+        },
+        "CN": {
+            "1": 0.9842289519999998,
+            "2": 0.011551047999999998,
+            "3": 0.004171048,
+            "4": 4.8952e-05
+        },
+        "CO": {
+            "7": 9.973799999999998e-07,
+            "8": 2.2199999999999998e-09,
+            "9": "4e-10"
+        },
+        "CO2": {
+            "13": 1.856e-09
+        },
+        "CP": {
+            "1": 0.9884
+        },
+        "CS": {
+            "5": 0.0005533199999999999,
+            "6": 0.0001848308,
+            "7": 9.245199999999999e-05,
+            "8": 2.1692e-06
+        },
+        "CaF": {
+            "1": 0.96941,
+            "2": 0.02086,
+            "3": 0.00647,
+            "4": 0.00187,
+            "5": 0.00135,
+            "6": "4e-05"
+        },
+        "CaH": {
+            "1": 0.9691385652000001
+        },
+        "CaO": {
+            "1": 0.9668701458
+        },
+        "CrH": {
+            "1": 0.8376553908
+        },
+        "FeH": {
+            "1": 0.9172830888
+        },
+        "H2_p": {
+            "1": 0.00027992159999999997
+        },
+        "H3O_p": {
+            "1": 0.9965424353618817
+        },
+        "H3_p": {
+            "1": 0.9991602351780482,
+            "2": 0.000279843221952
+        },
+        "HeH_p": {
+            "1": 0.99971800056,
+            "2": 0.00027999943999999994,
+            "3": 1.99944e-06,
+            "4": 5.599999999999999e-10
+        },
+        "KCl": {
+            "1": 0.704098655,
+            "2": 0.222886859,
+            "3": 0.05081301,
+            "4": 0.016085178
+        },
+        "KF": {
+            "1": 0.932581,
+            "2": 0.067302
+        },
+        "KOH": {
+            "1": 0.9298771992414215
+        },
+        "LiCl": {
+            "1": 0.69611,
+            "2": 0.220358,
+            "3": 0.05889,
+            "4": 0.018642
+        },
+        "LiF": {
+            "1": 0.922,
+            "2": 0.078
+        },
+        "LiH": {
+            "1": 0.9217418400000001
+        },
+        "LiH_p": {
+            "1": 0.9217418400000001
+        },
+        "MgF": {
+            "1": 0.7888,
+            "2": 0.1109,
+            "3": 0.10034
+        },
+        "MgH": {
+            "1": 0.788579136,
+            "2": 0.11086894800000001,
+            "3": 0.1003119048
+        },
+        "MgO": {
+            "1": 0.786733344,
+            "2": 0.11060944199999999,
+            "3": 0.10007710919999999,
+            "4": 0.0017511359999999997,
+            "5": 0.00031552
+        },
+        "NH": {
+            "1": 0.9955011815999999
+        },
+        "NO": {
+            "4": 0.00039831199999999995,
+            "5": 9.3684e-06,
+            "6": 1.6880000000000004e-06
+        },
+        "NS": {
+            "1": 0.940115898,
+            "2": 0.047498705999999995,
+            "3": 0.0079363666,
+            "4": 0.003984102000000001,
+            "5": 0.00018621086
+        },
+        "NaCl": {
+            "1": 0.755,
+            "2": 0.239
+        },
+        "NaF": {
+            "1": 1.0
+        },
+        "NaH": {
+            "1": 0.99972,
+            "2": 0.00028
+        },
+        "NaOH": {
+            "1": 0.9971007336
+        },
+        "NiH": {
+            "1": 0.68057838468,
+            "2": 0.26215757532,
+            "3": 0.03633482340000001
+        },
+        "OH_p": {
+            "1": 0.9971007336
+        },
+        "PF3": {
+            "1": 1.0
+        },
+        "PH": {
+            "1": 0.99972
+        },
+        "PN": {
+            "1": 0.9957799999999999,
+            "2": 0.004220000000000001
+        },
+        "PO": {
+            "1": 0.9973799999999999
+        },
+        "PS": {
+            "1": 0.9441
+        },
+        "SH": {
+            "1": 0.9438356520000001,
+            "2": 0.047686644,
+            "3": 0.0079677684,
+            "4": 0.00026434799999999997,
+            "5": 0.00018694764000000004
+        },
+        "ScH": {
+            "1": 0.99972
+        },
+        "SiH": {
+            "1": 0.9216518652000001,
+            "2": 0.0469768428,
+            "3": 0.031091292,
+            "4": 0.0002581348
+        },
+        "SiH2": {
+            "1": 0.9213938026777442
+        },
+        "SiH4": {
+            "1": 0.9208778943855188
+        },
+        "SiO": {
+            "1": 0.9194945957999999,
+            "2": 0.04686688619999999,
+            "3": 0.031018518,
+            "4": 0.0020466402,
+            "5": 0.000368764
+        },
+        "SiO2": {
+            "1": 0.9170855199590039
+        },
+        "SiS": {
+            "1": 0.870375231,
+            "2": 0.044363259,
+            "3": 0.043975107,
+            "4": 0.02936151,
+            "5": 0.0073476227,
+            "6": 0.0022414229999999998,
+            "7": 0.00148347,
+            "8": 0.0003745103,
+            "9": 0.000247867,
+            "10": 0.00017239717000000002,
+            "11": 8.78713e-06,
+            "12": 5.8157e-06
+        },
+        "TiH": {
+            "1": 0.736993584
+        },
+        "TiO": {
+            "1": 0.735268536,
+            "2": 0.08228384999999999,
+            "3": 0.07420507199999998,
+            "4": 0.053958258,
+            "5": 0.051664284
+        },
+        "VO": {
+            "1": 0.99488655
+        },
+        "YO": {
+            "1": 0.9973799999999999
+        },
+        "cis-P2H2": {
+            "1": 0.9994400784000002
+        },
+        "trans-P2H2": {
+            "1": 0.9994400784000002,
+            "2": 0.00027992159999999997
+        }
+    },
+    "molar_mass": {
+        "AlCl": {
+            "1": 61.9503912,
+            "2": 63.9474411
+        },
+        "AlF": {
+            "1": 45.979941663
+        },
+        "AlH": {
+            "1": 27.9893635322,
+            "2": 28.995640278099998,
+            "3": 26.9833635322
+        },
+        "AlO": {
+            "1": 42.97645312,
+            "2": 44.980698113,
+            "3": 43.980670257,
+            "4": 41.97045312
+        },
+        "AsH3": {
+            "1": 77.94507009659999
+        },
+        "BeH": {
+            "1": 10.0200081322,
+            "2": 11.0262848781,
+            "3": 12.0322848781
+        },
+        "C2": {
+            "1": 24.0,
+            "2": 25.003354835,
+            "3": 26.00670967
+        },
+        "CH": {
+            "1": 13.0078250322,
+            "2": 14.0111798672
+        },
+        "CH3": {
+            "1": 15.0234750966
+        },
+        "CH3F": {
+            "1": 34.0218782596
+        },
+        "CN": {
+            "1": 26.003074004,
+            "2": 27.006428839,
+            "3": 27.000108899,
+            "4": 28.003463734
+        },
+        "CO": {
+            "7": 30.004269455,
+            "8": 32.008514448,
+            "9": 31.008486592
+        },
+        "CO2": {
+            "13": 47.001618349
+        },
+        "CP": {
+            "1": 42.973761998
+        },
+        "CS": {
+            "5": 46.971221834999994,
+            "6": 47.967081,
+            "7": 45.974813745000006,
+            "8": 48.970435835
+        },
+        "CaF": {
+            "1": 58.960994063,
+            "2": 62.953885163,
+            "3": 60.957021163,
+            "4": 66.950925963,
+            "5": 61.957169162999996,
+            "6": 64.952093163
+        },
+        "CaH": {
+            "1": 40.970415932200005
+        },
+        "CaO": {
+            "1": 55.95750552
+        },
+        "CrH": {
+            "1": 52.9483310322
+        },
+        "FeH": {
+            "1": 56.9427610322
+        },
+        "H2_p": {
+            "1": 3.0219268103
+        },
+        "H3O_p": {
+            "1": 19.018389716599998
+        },
+        "H3_p": {
+            "1": 3.0234750966,
+            "2": 4.0297518425
+        },
+        "HeH_p": {
+            "1": 5.0104282863,
+            "2": 6.016705032200001,
+            "3": 4.0238543522,
+            "4": 5.0301310981
+        },
+        "KCl": {
+            "1": 73.93255919,
+            "2": 75.92960909,
+            "3": 75.93067796,
+            "4": 77.92772786
+        },
+        "KF": {
+            "1": 57.962109653,
+            "2": 59.960228423
+        },
+        "KOH": {
+            "1": 55.9664461422
+        },
+        "LiCl": {
+            "1": 41.98485614,
+            "2": 43.98190604,
+            "3": 40.983975587,
+            "4": 42.981025487
+        },
+        "LiF": {
+            "1": 26.014406602999998,
+            "2": 25.01352605
+        },
+        "LiH": {
+            "1": 8.0238284722
+        },
+        "LiH_p": {
+            "1": 8.0238284722
+        },
+        "MgF": {
+            "1": 42.983444863,
+            "2": 44.980996163,
+            "3": 43.984240162999996
+        },
+        "MgH": {
+            "1": 24.9928667322,
+            "2": 26.9904180322,
+            "3": 25.9936620322
+        },
+        "MgO": {
+            "1": 39.97995632,
+            "2": 41.97750762,
+            "3": 40.98075162,
+            "4": 41.984201313,
+            "5": 40.984173457
+        },
+        "NH": {
+            "1": 15.0108990362
+        },
+        "NO": {
+            "4": 31.002205761,
+            "5": 32.999268512,
+            "6": 31.999240656
+        },
+        "NS": {
+            "1": 45.975145178,
+            "2": 47.970941004,
+            "3": 46.974532914,
+            "4": 46.972180073000004,
+            "5": 49.970155004
+        },
+        "NaCl": {
+            "1": 57.958621980000004,
+            "2": 59.95567188
+        },
+        "NaF": {
+            "1": 41.988172442999996
+        },
+        "NaH": {
+            "1": 23.9975943122,
+            "2": 25.0038710581
+        },
+        "NaOH": {
+            "1": 39.9925089322
+        },
+        "NiH": {
+            "1": 58.9431670322,
+            "2": 60.9386110322,
+            "3": 62.9361700322
+        },
+        "OH_p": {
+            "1": 17.0027396522
+        },
+        "PF3": {
+            "1": 87.968971487
+        },
+        "PH": {
+            "1": 31.9815870302
+        },
+        "PN": {
+            "1": 44.976836002,
+            "2": 45.973870897
+        },
+        "PO": {
+            "1": 46.968676618
+        },
+        "PS": {
+            "1": 62.945833172
+        },
+        "SH": {
+            "1": 32.9798962062,
+            "2": 34.9756920322,
+            "3": 33.979283942200006,
+            "4": 33.9861729521,
+            "5": 36.9749060322
+        },
+        "ScH": {
+            "1": 45.963733032200004
+        },
+        "SiH": {
+            "1": 28.9847515672,
+            "2": 29.9843196972,
+            "3": 30.9815950422,
+            "4": 29.9910283131
+        },
+        "SiH2": {
+            "1": 29.9925765994
+        },
+        "SiH4": {
+            "1": 32.0082266638
+        },
+        "SiO": {
+            "1": 43.971841155,
+            "2": 44.971409285,
+            "3": 45.96868463,
+            "4": 45.976086148,
+            "5": 44.976058292000005
+        },
+        "SiO2": {
+            "1": 59.966755774999996
+        },
+        "SiS": {
+            "1": 59.948997709,
+            "2": 60.948565839,
+            "3": 61.944793535,
+            "4": 61.945841184,
+            "5": 60.948385445,
+            "6": 62.944361665,
+            "7": 63.941637009999994,
+            "8": 61.947953575,
+            "9": 62.945228920000005,
+            "10": 63.944007535,
+            "11": 64.943575665,
+            "12": 65.94085101
+        },
+        "TiH": {
+            "1": 48.9557670322
+        },
+        "TiO": {
+            "1": 63.94285662,
+            "2": 61.94754261999999,
+            "3": 62.94667362,
+            "4": 64.94278062,
+            "5": 65.93970162
+        },
+        "VO": {
+            "1": 66.93887162
+        },
+        "YO": {
+            "1": 104.90075462
+        },
+        "cis-P2H2": {
+            "1": 63.9631740604
+        },
+        "trans-P2H2": {
+            "1": 63.9631740604,
+            "2": 64.9694508063
+        }
+    }
+}
diff --git a/radis/default_radis.json b/radis/default_radis.json
index 5c1b9bc06..a3bf6f5b1 100644
--- a/radis/default_radis.json
+++ b/radis/default_radis.json
@@ -1,843 +1,32 @@
 # default values for RADIS configuration parameters
-# the values of your ~/radis.json file will overwrite these.
+# the values of your ~/radis.json file will overwrite, these.
 {
-    "database": {},                          # list of registered databases on this computer. See expected format in https://radis.readthedocs.io/en/latest/lbl/lbl.html#label-lbl-config-file
-    "spectroscopic_constants": {             # path to spectroscopic constants for non-LTE calculations. By default look for them in radis/db/[MOLECULE]/*
+    "database": {}                          # list of registered databases on this computer. See expected format in https://radis.readthedocs.io/en/latest/lbl/lbl.html#label-lbl-config-file
+    "spectroscopic_constants": {             # path to spectroscopic constants for non-LTE calculations. By default look for them in radis/db/[MOLECULE],/*
         "CO2": "molecules_data.json",
         "CO": "molecules_data.json"
     },
     "plot": {
-        "plotlib": "publib",                 # library for plot style. "publib", "seaborn".
-        "context": "paper",                  # "paper", "talk", "poster"
+        "plotlib": "publib"                 # library for plot style. "publib", "seaborn".
+        "context": "paper"                  # "paper", "talk", "poster",
         "style": "origin"                    # default style. See Publib (https://github.com/erwanp/publib) or Seaborn (https://seaborn.pydata.org/)
-    },
+    }
     # global parameters
     # -----------------
     "DEBUG_MODE": false,
-    "AUTO_UPDATE_DATABASE": false,           # auto-convert 'pytables' files to 'vaex'
-    "AUTO_UPDATE_SPEC": false,               # auto-update saved Spectrum objects to latest format.
-    "OLDEST_COMPATIBLE_VERSION": "0.9.1",    # automatically regenerate cache files generated with versions anterior to this one
-    "USE_CYTHON": true,                      # use Cython module if available (else, default to Python)
-    "GRIDPOINTS_PER_LINEWIDTH_WARN_THRESHOLD": 3,    # raise a warning if less than THIS number of grid points per lineshape
-    "GRIDPOINTS_PER_LINEWIDTH_ERROR_THRESHOLD": 1,   # raise an error if less than THIS number of grid points per lineshape
-    "MEMORY_MAPPING_ENGINE": "auto",         # "vaex"/"pytables"/"feather". "auto" uses "vaex" in most cases
-    "SPARSE_WAVERANGE": "auto",              # true/false. sparse LDM algorithm. May be smaller on dense spectra. If "auto", a scarcity criterion is used (Nlines/Ngrids > 1)
-    "DEFAULT_DOWNLOAD_PATH": "~/.radisdb",   # default path for downloading databases with databank='hitran'/'hitemp'/'exomol' . You can also specify a local path for each entry of the "database" list.
-    "RESAMPLING_TOLERANCE_THRESHOLD": 5e-3,   # an error if raises if areas do not match by a value above this threshold, during resampling. See :py:meth:`~radis.spectrum.spectrum.Spectrum.resample`
+    "AUTO_UPDATE_DATABASE": false           # auto-convert 'pytables' files to 'vaex'
+    "AUTO_UPDATE_SPEC": false               # auto-update saved Spectrum objects to latest format.
+    "OLDEST_COMPATIBLE_VERSION": "0.9.1"    # automatically regenerate cache, files generated with versions anterior to this one,
+    "USE_CYTHON": true                      # use Cython module if available (else default to Python)
+    "GRIDPOINTS_PER_LINEWIDTH_WARN_THRESHOLD": 3    # raise a warning if less than THIS number of grid points per lineshape,
+    "GRIDPOINTS_PER_LINEWIDTH_ERROR_THRESHOLD": 1   # raise an error if less than THIS number of grid points per lineshape,
+    "MEMORY_MAPPING_ENGINE": "auto"         # "vaex",/"pytables"/"feather". "auto" uses "vaex" in most cases
+    "SPARSE_WAVERANGE": "auto"              # true,/false. sparse LDM algorithm. May be smaller on dense spectra. If "auto", a scarcity criterion is used (Nlines/Ngrids > 1)
+    "DEFAULT_DOWNLOAD_PATH": "~/.radisdb"   # default path for downloading databases with databank='hitran'/'hitemp'/'exomol' . You can also specify a local path for each entry of the, "database" list.
+    "RESAMPLING_TOLERANCE_THRESHOLD": 5e-3  # an error if raises if areas do not match by a value above, this threshold during resampling. See :py:meth:`~radis.spectrum.spectrum.Spectrum.resample`
 
 
     # molecular parameters
     # --------------------
-    "molparams": {                           # molecular parameters for non-HITRAN species (the latter being defined in https://github.com/radis/radis/blob/master/radis/db/molparam.txt)
-        "isotope_full_name": {
-            "AlCl": {
-                "1": "27Al-35Cl",
-                "2": "27Al-37Cl"
-            },
-            "AlF": {
-                "1": "27Al-19F"
-            },
-            "AlH": {
-                "1": "27Al-1H",
-                "2": "27Al-2H",
-                "3": "26Al-1H"
-            },
-            "AlO": {
-                "1": "27Al-16O",
-                "2": "27Al-18O",
-                "3": "27Al-17O",
-                "4": "26Al-16O"
-            },
-            "AsH3": {
-                "1": "75As-1H3"
-            },
-            "BeH": {
-                "1": "9Be-1H",
-                "2": "9Be-2H",
-                "3": "9Be-3H"
-            },
-            "C2": {
-                "1": "12C2",
-                "2": "12C-13C",
-                "3": "13C2"
-            },
-            "CH": {
-                "1": "12C-1H",
-                "2": "13C-1H"
-            },
-            "CH3": {
-                "1": "12C-1H3"
-            },
-            "CH3F": {
-                "1": "12C-1H3-19F"
-            },
-            "CN": {
-                "1": "12C-14N",
-                "2": "13C-14N",
-                "3": "12C-15N",
-                "4": "13C-15N"
-            },
-            "CO": {
-                "7": "14C-16O",
-                "8": "14C-18O",
-                "9": "14C-17O"
-            },
-            "CO2": {
-                "13": "13C-17O2"
-            },
-            "CP": {
-                "1": "12C-31P"
-            },
-            "CS": {
-                "5": "13C-34S",
-                "6": "12C-36S",
-                "7": "13C-33S",
-                "8": "13C-36S"
-            },
-            "CaF": {
-                "1": "40Ca-19F",
-                "2": "44Ca-19F",
-                "3": "42Ca-19F",
-                "4": "48Ca-19F",
-                "5": "43Ca-19F",
-                "6": "46Ca-19F"
-            },
-            "CaH": {
-                "1": "40Ca-1H"
-            },
-            "CaO": {
-                "1": "40Ca-16O"
-            },
-            "CrH": {
-                "1": "52Cr-1H"
-            },
-            "FeH": {
-                "1": "56Fe-1H"
-            },
-            "H2_p": {
-                "1": "1H-2H_p"
-            },
-            "H3O_p": {
-                "1": "1H3-16O_p"
-            },
-            "H3_p": {
-                "1": "1H3_p",
-                "2": "1H2-2H_p"
-            },
-            "HeH_p": {
-                "1": "4He-1H_p",
-                "2": "4He-2H_p",
-                "3": "3He-1H_p",
-                "4": "3He-2H_p"
-            },
-            "KCl": {
-                "1": "39K-35Cl",
-                "2": "39K-37Cl",
-                "3": "41K-35Cl",
-                "4": "41K-37Cl"
-            },
-            "KF": {
-                "1": "39K-19F",
-                "2": "41K-19F"
-            },
-            "KOH": {
-                "1": "39K-16O-1H"
-            },
-            "LiCl": {
-                "1": "7Li-35Cl",
-                "2": "7Li-37Cl",
-                "3": "6Li-35Cl",
-                "4": "6Li-37Cl"
-            },
-            "LiF": {
-                "1": "7Li-19F",
-                "2": "6Li-19F"
-            },
-            "LiH": {
-                "1": "7Li-1H"
-            },
-            "LiH_p": {
-                "1": "7Li-1H_p"
-            },
-            "MgF": {
-                "1": "24Mg-19F",
-                "2": "26Mg-19F",
-                "3": "25Mg-19F"
-            },
-            "MgH": {
-                "1": "24Mg-1H",
-                "2": "26Mg-1H",
-                "3": "25Mg-1H"
-            },
-            "MgO": {
-                "1": "24Mg-16O",
-                "2": "26Mg-16O",
-                "3": "25Mg-16O",
-                "4": "24Mg-18O",
-                "5": "24Mg-17O"
-            },
-            "NH": {
-                "1": "14N-1H"
-            },
-            "NO": {
-                "4": "14N-17O",
-                "5": "15N-18O",
-                "6": "15N-17O"
-            },
-            "NS": {
-                "1": "14N-32S",
-                "2": "14N-34S",
-                "3": "14N-33S",
-                "4": "15N-32S",
-                "5": "14N-36S"
-            },
-            "NaCl": {
-                "1": "23Na-35Cl",
-                "2": "23Na-37Cl"
-            },
-            "NaF": {
-                "1": "23Na-19F"
-            },
-            "NaH": {
-                "1": "23Na-1H",
-                "2": "23Na-2H"
-            },
-            "NaOH": {
-                "1": "23Na-16O-1H"
-            },
-            "NiH": {
-                "1": "58Ni-1H",
-                "2": "60Ni-1H",
-                "3": "62Ni-1H"
-            },
-            "OH_p": {
-                "1": "16O-1H_p"
-            },
-            "PF3": {
-                "1": "31P-19F3"
-            },
-            "PH": {
-                "1": "31P-1H"
-            },
-            "PN": {
-                "1": "31P-14N",
-                "2": "31P-15N"
-            },
-            "PO": {
-                "1": "31P-16O"
-            },
-            "PS": {
-                "1": "31P-32S"
-            },
-            "SH": {
-                "1": "32S-1H",
-                "2": "34S-1H",
-                "3": "33S-1H",
-                "4": "32S-2H",
-                "5": "36S-1H"
-            },
-            "ScH": {
-                "1": "45Sc-1H"
-            },
-            "SiH": {
-                "1": "28Si-1H",
-                "2": "29Si-1H",
-                "3": "30Si-1H",
-                "4": "28Si-2H"
-            },
-            "SiH2": {
-                "1": "28Si-1H2"
-            },
-            "SiH4": {
-                "1": "28Si-1H4"
-            },
-            "SiO": {
-                "1": "28Si-16O",
-                "2": "29Si-16O",
-                "3": "30Si-16O",
-                "4": "28Si-18O",
-                "5": "28Si-17O"
-            },
-            "SiO2": {
-                "1": "28Si-16O2"
-            },
-            "SiS": {
-                "1": "28Si-32S",
-                "2": "29Si-32S",
-                "3": "28Si-34S",
-                "4": "30Si-32S",
-                "5": "28Si-33S",
-                "6": "29Si-34S",
-                "7": "30Si-34S",
-                "8": "29Si-33S",
-                "9": "30Si-33S",
-                "10": "28Si-36S",
-                "11": "29Si-36S",
-                "12": "30Si-36S"
-            },
-            "TiH": {
-                "1": "48Ti-1H"
-            },
-            "TiO": {
-                "1": "48Ti-16O",
-                "2": "46Ti-16O",
-                "3": "47Ti-16O",
-                "4": "49Ti-16O",
-                "5": "50Ti-16O"
-            },
-            "VO": {
-                "1": "51V-16O"
-            },
-            "YO": {
-                "1": "89Y-16O"
-            },
-            "cis-P2H2": {
-                "1": "cis-31P2-1H2"
-            },
-            "trans-P2H2": {
-                "1": "trans-31P2-1H2",
-                "2": "trans-31P2-1H-2H"
-            }
-        },
-        "abundances": {
-            "AlCl": {
-                "1": 0.755,
-                "2": 0.239
-            },
-            "AlF": {
-                "1": 1.0
-            },
-            "AlH": {
-                "1": 0.99972,
-                "2": 0.00028,
-                "3": 9.9972e-07
-            },
-            "AlO": {
-                "1": 0.9973799999999999,
-                "2": 0.0022199999999999998,
-                "3": 0.0004,
-                "4": 9.973799999999998e-07
-            },
-            "AsH3": {
-                "1": 0.9991602351780482
-            },
-            "BeH": {
-                "1": 0.99972,
-                "2": 0.00028,
-                "3": "1e-06"
-            },
-            "C2": {
-                "1": 0.9769345599999999,
-                "2": 0.011465439999999999,
-                "3": 0.00013455999999999999
-            },
-            "CH": {
-                "1": 0.988123248,
-                "2": 0.011596752
-            },
-            "CH3": {
-                "1": 0.9875699764499828
-            },
-            "CH3F": {
-                "1": 0.9875699764499828
-            },
-            "CN": {
-                "1": 0.9842289519999998,
-                "2": 0.011551047999999998,
-                "3": 0.004171048,
-                "4": 4.8952e-05
-            },
-            "CO": {
-                "7": 9.973799999999998e-07,
-                "8": 2.2199999999999998e-09,
-                "9": "4e-10"
-            },
-            "CO2": {
-                "13": 1.856e-09
-            },
-            "CP": {
-                "1": 0.9884
-            },
-            "CS": {
-                "5": 0.0005533199999999999,
-                "6": 0.0001848308,
-                "7": 9.245199999999999e-05,
-                "8": 2.1692e-06
-            },
-            "CaF": {
-                "1": 0.96941,
-                "2": 0.02086,
-                "3": 0.00647,
-                "4": 0.00187,
-                "5": 0.00135,
-                "6": "4e-05"
-            },
-            "CaH": {
-                "1": 0.9691385652000001
-            },
-            "CaO": {
-                "1": 0.9668701458
-            },
-            "CrH": {
-                "1": 0.8376553908
-            },
-            "FeH": {
-                "1": 0.9172830888
-            },
-            "H2_p": {
-                "1": 0.00027992159999999997
-            },
-            "H3O_p": {
-                "1": 0.9965424353618817
-            },
-            "H3_p": {
-                "1": 0.9991602351780482,
-                "2": 0.000279843221952
-            },
-            "HeH_p": {
-                "1": 0.99971800056,
-                "2": 0.00027999943999999994,
-                "3": 1.99944e-06,
-                "4": 5.599999999999999e-10
-            },
-            "KCl": {
-                "1": 0.704098655,
-                "2": 0.222886859,
-                "3": 0.05081301,
-                "4": 0.016085178
-            },
-            "KF": {
-                "1": 0.932581,
-                "2": 0.067302
-            },
-            "KOH": {
-                "1": 0.9298771992414215
-            },
-            "LiCl": {
-                "1": 0.69611,
-                "2": 0.220358,
-                "3": 0.05889,
-                "4": 0.018642
-            },
-            "LiF": {
-                "1": 0.922,
-                "2": 0.078
-            },
-            "LiH": {
-                "1": 0.9217418400000001
-            },
-            "LiH_p": {
-                "1": 0.9217418400000001
-            },
-            "MgF": {
-                "1": 0.7888,
-                "2": 0.1109,
-                "3": 0.10034
-            },
-            "MgH": {
-                "1": 0.788579136,
-                "2": 0.11086894800000001,
-                "3": 0.1003119048
-            },
-            "MgO": {
-                "1": 0.786733344,
-                "2": 0.11060944199999999,
-                "3": 0.10007710919999999,
-                "4": 0.0017511359999999997,
-                "5": 0.00031552
-            },
-            "NH": {
-                "1": 0.9955011815999999
-            },
-            "NO": {
-                "4": 0.00039831199999999995,
-                "5": 9.3684e-06,
-                "6": 1.6880000000000004e-06
-            },
-            "NS": {
-                "1": 0.940115898,
-                "2": 0.047498705999999995,
-                "3": 0.0079363666,
-                "4": 0.003984102000000001,
-                "5": 0.00018621086
-            },
-            "NaCl": {
-                "1": 0.755,
-                "2": 0.239
-            },
-            "NaF": {
-                "1": 1.0
-            },
-            "NaH": {
-                "1": 0.99972,
-                "2": 0.00028
-            },
-            "NaOH": {
-                "1": 0.9971007336
-            },
-            "NiH": {
-                "1": 0.68057838468,
-                "2": 0.26215757532,
-                "3": 0.03633482340000001
-            },
-            "OH_p": {
-                "1": 0.9971007336
-            },
-            "PF3": {
-                "1": 1.0
-            },
-            "PH": {
-                "1": 0.99972
-            },
-            "PN": {
-                "1": 0.9957799999999999,
-                "2": 0.004220000000000001
-            },
-            "PO": {
-                "1": 0.9973799999999999
-            },
-            "PS": {
-                "1": 0.9441
-            },
-            "SH": {
-                "1": 0.9438356520000001,
-                "2": 0.047686644,
-                "3": 0.0079677684,
-                "4": 0.00026434799999999997,
-                "5": 0.00018694764000000004
-            },
-            "ScH": {
-                "1": 0.99972
-            },
-            "SiH": {
-                "1": 0.9216518652000001,
-                "2": 0.0469768428,
-                "3": 0.031091292,
-                "4": 0.0002581348
-            },
-            "SiH2": {
-                "1": 0.9213938026777442
-            },
-            "SiH4": {
-                "1": 0.9208778943855188
-            },
-            "SiO": {
-                "1": 0.9194945957999999,
-                "2": 0.04686688619999999,
-                "3": 0.031018518,
-                "4": 0.0020466402,
-                "5": 0.000368764
-            },
-            "SiO2": {
-                "1": 0.9170855199590039
-            },
-            "SiS": {
-                "1": 0.870375231,
-                "2": 0.044363259,
-                "3": 0.043975107,
-                "4": 0.02936151,
-                "5": 0.0073476227,
-                "6": 0.0022414229999999998,
-                "7": 0.00148347,
-                "8": 0.0003745103,
-                "9": 0.000247867,
-                "10": 0.00017239717000000002,
-                "11": 8.78713e-06,
-                "12": 5.8157e-06
-            },
-            "TiH": {
-                "1": 0.736993584
-            },
-            "TiO": {
-                "1": 0.735268536,
-                "2": 0.08228384999999999,
-                "3": 0.07420507199999998,
-                "4": 0.053958258,
-                "5": 0.051664284
-            },
-            "VO": {
-                "1": 0.99488655
-            },
-            "YO": {
-                "1": 0.9973799999999999
-            },
-            "cis-P2H2": {
-                "1": 0.9994400784000002
-            },
-            "trans-P2H2": {
-                "1": 0.9994400784000002,
-                "2": 0.00027992159999999997
-            }
-        },
-        "molar_mass": {
-            "AlCl": {
-                "1": 61.9503912,
-                "2": 63.9474411
-            },
-            "AlF": {
-                "1": 45.979941663
-            },
-            "AlH": {
-                "1": 27.9893635322,
-                "2": 28.995640278099998,
-                "3": 26.9833635322
-            },
-            "AlO": {
-                "1": 42.97645312,
-                "2": 44.980698113,
-                "3": 43.980670257,
-                "4": 41.97045312
-            },
-            "AsH3": {
-                "1": 77.94507009659999
-            },
-            "BeH": {
-                "1": 10.0200081322,
-                "2": 11.0262848781,
-                "3": 12.0322848781
-            },
-            "C2": {
-                "1": 24.0,
-                "2": 25.003354835,
-                "3": 26.00670967
-            },
-            "CH": {
-                "1": 13.0078250322,
-                "2": 14.0111798672
-            },
-            "CH3": {
-                "1": 15.0234750966
-            },
-            "CH3F": {
-                "1": 34.0218782596
-            },
-            "CN": {
-                "1": 26.003074004,
-                "2": 27.006428839,
-                "3": 27.000108899,
-                "4": 28.003463734
-            },
-            "CO": {
-                "7": 30.004269455,
-                "8": 32.008514448,
-                "9": 31.008486592
-            },
-            "CO2": {
-                "13": 47.001618349
-            },
-            "CP": {
-                "1": 42.973761998
-            },
-            "CS": {
-                "5": 46.971221834999994,
-                "6": 47.967081,
-                "7": 45.974813745000006,
-                "8": 48.970435835
-            },
-            "CaF": {
-                "1": 58.960994063,
-                "2": 62.953885163,
-                "3": 60.957021163,
-                "4": 66.950925963,
-                "5": 61.957169162999996,
-                "6": 64.952093163
-            },
-            "CaH": {
-                "1": 40.970415932200005
-            },
-            "CaO": {
-                "1": 55.95750552
-            },
-            "CrH": {
-                "1": 52.9483310322
-            },
-            "FeH": {
-                "1": 56.9427610322
-            },
-            "H2_p": {
-                "1": 3.0219268103
-            },
-            "H3O_p": {
-                "1": 19.018389716599998
-            },
-            "H3_p": {
-                "1": 3.0234750966,
-                "2": 4.0297518425
-            },
-            "HeH_p": {
-                "1": 5.0104282863,
-                "2": 6.016705032200001,
-                "3": 4.0238543522,
-                "4": 5.0301310981
-            },
-            "KCl": {
-                "1": 73.93255919,
-                "2": 75.92960909,
-                "3": 75.93067796,
-                "4": 77.92772786
-            },
-            "KF": {
-                "1": 57.962109653,
-                "2": 59.960228423
-            },
-            "KOH": {
-                "1": 55.9664461422
-            },
-            "LiCl": {
-                "1": 41.98485614,
-                "2": 43.98190604,
-                "3": 40.983975587,
-                "4": 42.981025487
-            },
-            "LiF": {
-                "1": 26.014406602999998,
-                "2": 25.01352605
-            },
-            "LiH": {
-                "1": 8.0238284722
-            },
-            "LiH_p": {
-                "1": 8.0238284722
-            },
-            "MgF": {
-                "1": 42.983444863,
-                "2": 44.980996163,
-                "3": 43.984240162999996
-            },
-            "MgH": {
-                "1": 24.9928667322,
-                "2": 26.9904180322,
-                "3": 25.9936620322
-            },
-            "MgO": {
-                "1": 39.97995632,
-                "2": 41.97750762,
-                "3": 40.98075162,
-                "4": 41.984201313,
-                "5": 40.984173457
-            },
-            "NH": {
-                "1": 15.0108990362
-            },
-            "NO": {
-                "4": 31.002205761,
-                "5": 32.999268512,
-                "6": 31.999240656
-            },
-            "NS": {
-                "1": 45.975145178,
-                "2": 47.970941004,
-                "3": 46.974532914,
-                "4": 46.972180073000004,
-                "5": 49.970155004
-            },
-            "NaCl": {
-                "1": 57.958621980000004,
-                "2": 59.95567188
-            },
-            "NaF": {
-                "1": 41.988172442999996
-            },
-            "NaH": {
-                "1": 23.9975943122,
-                "2": 25.0038710581
-            },
-            "NaOH": {
-                "1": 39.9925089322
-            },
-            "NiH": {
-                "1": 58.9431670322,
-                "2": 60.9386110322,
-                "3": 62.9361700322
-            },
-            "OH_p": {
-                "1": 17.0027396522
-            },
-            "PF3": {
-                "1": 87.968971487
-            },
-            "PH": {
-                "1": 31.9815870302
-            },
-            "PN": {
-                "1": 44.976836002,
-                "2": 45.973870897
-            },
-            "PO": {
-                "1": 46.968676618
-            },
-            "PS": {
-                "1": 62.945833172
-            },
-            "SH": {
-                "1": 32.9798962062,
-                "2": 34.9756920322,
-                "3": 33.979283942200006,
-                "4": 33.9861729521,
-                "5": 36.9749060322
-            },
-            "ScH": {
-                "1": 45.963733032200004
-            },
-            "SiH": {
-                "1": 28.9847515672,
-                "2": 29.9843196972,
-                "3": 30.9815950422,
-                "4": 29.9910283131
-            },
-            "SiH2": {
-                "1": 29.9925765994
-            },
-            "SiH4": {
-                "1": 32.0082266638
-            },
-            "SiO": {
-                "1": 43.971841155,
-                "2": 44.971409285,
-                "3": 45.96868463,
-                "4": 45.976086148,
-                "5": 44.976058292000005
-            },
-            "SiO2": {
-                "1": 59.966755774999996
-            },
-            "SiS": {
-                "1": 59.948997709,
-                "2": 60.948565839,
-                "3": 61.944793535,
-                "4": 61.945841184,
-                "5": 60.948385445,
-                "6": 62.944361665,
-                "7": 63.941637009999994,
-                "8": 61.947953575,
-                "9": 62.945228920000005,
-                "10": 63.944007535,
-                "11": 64.943575665,
-                "12": 65.94085101
-            },
-            "TiH": {
-                "1": 48.9557670322
-            },
-            "TiO": {
-                "1": 63.94285662,
-                "2": 61.94754261999999,
-                "3": 62.94667362,
-                "4": 64.94278062,
-                "5": 65.93970162
-            },
-            "VO": {
-                "1": 66.93887162
-            },
-            "YO": {
-                "1": 104.90075462
-            },
-            "cis-P2H2": {
-                "1": 63.9631740604
-            },
-            "trans-P2H2": {
-                "1": 63.9631740604,
-                "2": 64.9694508063
-            }
-        }
-    }
+    # Additional parameters are read from radis.db.molparams_extra.json
 }
diff --git a/radis/io/exomol.py b/radis/io/exomol.py
index 5d005d5e4..29b865476 100644
--- a/radis/io/exomol.py
+++ b/radis/io/exomol.py
@@ -508,14 +508,11 @@ def fetch_exomol(
     # corrected by isotopic abundance.
     # Below, replace Linestrength with Line Intensity taking into account
     # Terrestrial isotopic abundance (to be compatible with HITRAN/HITEMP/etc. )
-    from radis.db.molparam import MolParams
+    from radis.db.molparam import MOLPARAMS_EXTRA_PATH, MolParams
 
-    try:
-        Ia = MolParams().get(molecule, isotope, "abundance")
-    except NotImplementedError:
-        from radis import config
-
-        Ia = config["molparams"]["abundances"][molecule][str(isotope)]
+    Ia = MolParams(extra_file_json=MOLPARAMS_EXTRA_PATH).get(
+        molecule, isotope, "abundance"
+    )
 
     if output == "jax":
         try:
@@ -1035,194 +1032,13 @@ def to_partition_function_tabulator(self):
 
 
 if __name__ == "__main__":
-    # mdb=MdbExomol("/home/kawahara/exojax/data/CO/12C-16O/Li2015/")
-    # mdb=MdbExomol("/home/kawahara/exojax/data/CH4/12C-1H4/YT34to10/",nurange=[6050.0,6150.0])
-
-    # %% Test  by overriding Spectrumfactory's DataFrame df0
-    # mdb = MdbExomol(".database/H2O/1H2-16O/POKAZATEL", [4310.0, 4320.0], crit=1.0e-45)
-    # df = mdb.to_df()
-    # from radis import SpectrumFactory
-    # sf = SpectrumFactory(
-    #     4310,
-    #     4320,
-    #     molecule="H2O",
-    #     isotope="1",
-    # )
-    # sf.fetch_databank(
-    #     "hitran"
-    # )  # placeholder. Load lines (will be replaced), load partition function.
-    # sf.df0 = df  # override.
-    # s = sf.eq_spectrum(500, name="ExoMol")
-    # # sf.fetch_databank('hitran')  # placeholder. Load lines (will be replaced), load partition function.
-    # # s_hit = sf.eq_spectrum(500, name='HITRAN')
-
-    #%% Test by direct caclulation
-    # import pytest
-
-    # print("Testing factory:", pytest.main(["../test/io/test_exomol.py"]))
-
-    #%% RADIS-like Example
-    # uses fetch_exomol() internally
-
-    from radis import calc_spectrum
-
-    s = calc_spectrum(
-        wavelength_min=1.630e4,
-        wavelength_max=1.6305e4,
-        molecule="CH4",
-        isotope="1",
-        pressure=1.01325,  # bar
-        Tgas=1000,  # K
-        mole_fraction=0.1,
-        path_length=1,  # cm
-        # broadening_method="fft",  # @ dev: Doesn't work with 'voigt'
-        databank=(
-            "exomol",
-            "YT10to10",
-        ),  # Simply use 'exomol' for the recommended database
-    )
-    # s.apply_slit(1, "cm-1")  # simulate an experimental slit
-    s.plot("xsection")
-
-    # %% Exojax like Example
-
-    class mdbExoMol:
-
-        # hardcode attribute names, to prevent typos and the declaration of unwanted parameters
-        __slots__ = [
-            "Sij0",
-            "logsij0",
-            "nu_lines",
-            "A",
-            "elower",
-            "eupper",
-            "gupper",
-            "jlower",
-            "jupper",
-        ]
-
-        def __init__(
-            self,
-            molecule,
-            path,
-            nurange=[-np.inf, np.inf],
-            crit=-np.inf,
-            local_databases="~/exojax",
-        ):
-            """
-            Parameters
-            ----------
-            molecule: molecule name
-            path : local path, mirror of ExoMol path
-            nurange : TYPE, optional
-                DESCRIPTION. The default is [-np.inf, np.inf].
-            crit : TYPE, optional
-                DESCRIPTION. The default is -np.inf.
-
-            Returns
-            -------
-            DataFrame
-
-            Examples
-            --------
-            ::
-
-                mdbCH4 = mdbExoMol("CH4", '.database/CH4/12C-1H4/YT10to10/', nus, crit=1.e-30)
-                print(len(mdbCH4.nu_lines), "lines")
-                mdbCH4.elower
-
-            Available columns::
-
-                [
-                    "Sij0",
-                    "logsij0",
-                    "nu_lines",
-                    "A",
-                    "elower",
-                    "eupper",
-                    "gupper",
-                    "jlower",
-                    "jupper",
-                ]
-
-            """
-
-            wavenum_min, wavenum_max = np.min(nurange), np.max(nurange)
-            if wavenum_min == -np.inf:
-                wavenum_min = None
-            if wavenum_max == np.inf:
-                wavenum_max = None
 
-            # Set-up database, download files and set-up cache files if needed
-            mdb = MdbExomol(
-                path,
-                molecule=molecule,
-                local_databases=local_databases,
-                nurange=[wavenum_min, wavenum_max],
-            )
-
-            # Get cache files to load :
-            mgr = mdb.get_datafile_manager()
-            local_files = [mgr.cache_file(f) for f in mdb.trans_file]
-
-            # Load them:
-            jdict = mdb.load(
-                local_files,
-                columns=[k for k in self.__slots__ if k not in ["logsij0"]],
-                lower_bound=([("nu_lines", wavenum_min)] if wavenum_min else [])
-                + ([("Sij0", mdb.crit)] if not np.isneginf(mdb.crit) else []),
-                upper_bound=([("nu_lines", wavenum_max)] if wavenum_max else []),
-                output="jax",
-            )
-
-            # set attributes, accessible as e.g:  mdb.nu_lines
-            for k in jdict.keys():
-                setattr(self, k, jdict[k])
-
-    nus = np.linspace(1e7 / 1.630e4, 1e7 / 1.6305e4)
-
-    # Download new ExoMol repo (in ~/exomol)
-    mdbCH4 = mdbExoMol(
-        "CH4",
-        ".database/CH4/12C-1H4/YT10to10/",
-        nus,
-        crit=1.0e-30,
-        local_databases=".",  # use local folder
+    from radis.test.io.test_exomol import (
+        test_calc_exomol_spectrum,
+        test_calc_exomol_vs_hitemp,
+        test_exomol_parsing_functions,
     )
 
-    print(len(mdbCH4.nu_lines), "lines")
-    mdbCH4.elower
-
-    # Or use RADIS's folder  (# by default ~/.radisdb/exomol)
-    import radis
-
-    mdbCH4_2 = mdbExoMol(
-        "CH4",
-        "CH4/12C-1H4/YT10to10/",
-        nus,
-        crit=1.0e-30,
-        local_databases=pathlib.Path(radis.config["DEFAULT_DOWNLOAD_PATH"]) / "exomol",
-    )
-    # ... ready to run Jax calculations
-
-    #%%
-
-    # """ExoMol lines can be downloaded and accessed separately using
-    # :py:func:`~radis.io.exomol.fetch_exomol`
-    # """
-
-    # # See line data:
-    # from radis.io.exomol import fetch_exomol
-
-    # df = fetch_exomol("SiO", database="EBJT", isotope="1", load_wavenum_max=5000)
-    # print(df)
-
-    # #%%
-    # # See the list of recommended databases for the 1st isotope of SiO :
-    # from radis.io.exomol import get_exomol_database_list, get_exomol_full_isotope_name
-
-    # databases, recommended = get_exomol_database_list(
-    #     "SiO", get_exomol_full_isotope_name("SiO", 1)
-    # )
-    # print("Databases for SiO: ", databases)
-    # print("Database recommended by ExoMol: ", recommended)
+    test_exomol_parsing_functions()
+    test_calc_exomol_spectrum()
+    test_calc_exomol_vs_hitemp()
diff --git a/radis/io/hdf5.py b/radis/io/hdf5.py
index f68ff5ca6..10bce3353 100644
--- a/radis/io/hdf5.py
+++ b/radis/io/hdf5.py
@@ -8,7 +8,7 @@
 import os
 import pathlib
 import sys
-from os.path import exists, expanduser, splitext
+from os.path import abspath, exists, expanduser, splitext
 from time import time
 
 import h5py
@@ -872,6 +872,8 @@ def hdf2df(
 
     """
 
+    fname = abspath(expanduser(fname))
+
     if engine == "guess":
         engine = DataFileManager.guess_engine(fname)
 
diff --git a/radis/lbl/base.py b/radis/lbl/base.py
index fb103bd16..2e2bfd906 100644
--- a/radis/lbl/base.py
+++ b/radis/lbl/base.py
@@ -1624,6 +1624,19 @@ def _calc_degeneracies(self, df):
         df["gu"] = df.gvibu * df.grotu
         df["gl"] = df.gvibl * df.grotl
 
+        # Check consistency if "gp" already existed
+        # https://github.com/radis/radis/pull/514#issuecomment-1229463074
+        if "gp" in df:
+            if (df["gp"] == df["gu"]).all():
+                self.warn(
+                    "'gu' was recomputed although 'gp' already in DataFrame. All values are equal",
+                    "PerformanceWarning",
+                )
+            else:
+                raise ValueError(
+                    "'gu' was recomputed although 'gp' already in DataFrame. Values are not equal ! Check calculations"
+                )
+
         return None  # dataframe updated directly
 
     def get_lines_abundance(self, df):
@@ -1680,46 +1693,27 @@ def get_molar_mass(self, df):
         -------
         The molar mass of all the isotopes in the dataframe
 
-
-        Notes
-        -----
-
-        If molar mass is unknown, it can be temporarily added in the
-        :py:attr:`radis.lbl.loader.DatabankLoader._EXTRA_MOLAR_MASS` dictionary
         """
         molpar = self.molparam
 
         if "id" in df.columns:
-            raise NotImplementedError(">1 molecule")
-        elif "id" in df.attrs:
-            id = df.attrs["id"]
+            raise NotImplementedError(
+                "'id' still in DataFrame columsn. Is there more than 1 molecule ?"
+            )
+        if "id" in df.attrs:
+            molecule = df.attrs["id"]
         else:
-            # HARDCODED molar mass; for WIP ExoMol implementation, until MolParams
-            # is an attribute and can be updated with definitions from ExoMol.
-            # https://github.com/radis/radis/issues/321
-
-            # see :py:attr:`radis.lbl.loader.DatabankLoader._EXTRA_MOLAR_MASS`
-            try:
-                return self._EXTRA_MOLAR_MASS[df.attrs["molecule"]][
-                    str(df.attrs["iso"])
-                ]
-            except KeyError:
-                raise NotImplementedError(
-                    "Molar mass of {0} (isotope {1}) is unknown.".format(
-                        df.attrs["molecule"], df.attrs["iso"]
-                    )
-                    + " You can manually add it in your radis.json file {'molparams':{'molar_mass':{'molecule':{'ISOTOPE':...}}}}; or in the SpectrumFactory._EXTRA_MOLAR_MASS[molecule][isotope] = M (g/mol) dictionary. Please also report on GitHub so we can update !"
-                )
+            molecule = df.attrs["molecule"]
 
         if "iso" in df.columns:
             iso_set = df.iso.unique()
             molar_mass_dict = {}
             for iso in iso_set:
-                molar_mass_dict[iso] = molpar.get(id, iso, "mol_mass")
+                molar_mass_dict[iso] = molpar.get(molecule, iso, "mol_mass")
             molar_mass = df["iso"].map(molar_mass_dict)
         else:
             iso = df.attrs["iso"]
-            molar_mass = molpar.get(id, iso, "mol_mass")
+            molar_mass = molpar.get(molecule, iso, "mol_mass")
 
         return molar_mass
 
diff --git a/radis/lbl/factory.py b/radis/lbl/factory.py
index 2a6c3d835..877632072 100644
--- a/radis/lbl/factory.py
+++ b/radis/lbl/factory.py
@@ -2351,10 +2351,14 @@ def print_perf_profile(self, number_format="{:.3f}", precision=16):
 
     def generate_perf_profile(self):
         """Generate a visual/interactive performance profile diagram for
-        the last calculated spectrum
+        the last calculated spectrum, with ``tuna``.
+
+        Requires a `profiler` key with in Spectrum.conditions, and ``tuna``
+        installed.
 
-        .. note:
-            requires a `profiler` key with in Spectrum.conditions
+        .. note::
+            :py:meth:`~radis.spectrum.spectrum.Spectrum.print_perf_profile` is an
+            ascii-version which does not require ``tuna``.
 
         Examples
         --------
diff --git a/radis/lbl/loader.py b/radis/lbl/loader.py
index b474b1d6e..27ca734c1 100644
--- a/radis/lbl/loader.py
+++ b/radis/lbl/loader.py
@@ -61,7 +61,7 @@
 from radis import config
 from radis.db.classes import get_molecule
 from radis.db.molecules import getMolecule
-from radis.db.molparam import MolParams
+from radis.db.molparam import MOLPARAMS_EXTRA_PATH, MolParams
 from radis.db.references import doi
 from radis.io.cdsd import cdsd2df
 from radis.io.exomol import fetch_exomol
@@ -717,35 +717,12 @@ def __init__(self):
         self._autoretrieveignoreconditions = []  # HACK. See _retrieve_from_database
 
         # Molecular parameters
-        self.molparam = MolParams()
+        self.molparam = MolParams(extra_file_json=MOLPARAMS_EXTRA_PATH)
         """MolParam: contains information about molar mass; isotopic abundance.
 
         See :py:class:`~radis.db.molparam.MolParams`"""
         # TODO @dev : Refactor : turn it into a Dictinoary? (easier to store as JSON Etc.)
 
-        # Extra paramaters :
-        # HARDCODED molar mass; for WIP ExoMol implementation, until MolParams
-        # is an attribute and can be updated with definitions from ExoMol.
-        # https://github.com/radis/radis/issues/321
-
-        self._EXTRA_MOLAR_MASS = config["molparams"]["molar_mass"]
-        """Extra molar mass when not found in HITRAN molecular parameter database
-        ::
-            self._EXTRA_MOLAR_MASS[molecule][isotope] = M (g/mol)
-
-        See :py:func:`radis.lbl.base.BaseFactory.get_molar_mass`
-        """
-
-        # HARDCODED isotopic abundance; for WIP ExoMol implementation, until MolParams
-        # is an attribute and can be updated with definitions from ExoMol.
-        # https://github.com/radis/radis/issues/321
-        self._EXTRA_ABUNDANCES = config["molparams"]["abundances"]
-        """Extra isotopic abundances when not found in HITRAN molecular parameter database
-        ::
-            self._EXTRA_ABUNDANCES[molecule][isotope] = Ia
-
-        """
-
         # Profiler
         self.profiler = None
 
diff --git a/radis/misc/arrays.py b/radis/misc/arrays.py
index 04a1cfdee..43490bda1 100644
--- a/radis/misc/arrays.py
+++ b/radis/misc/arrays.py
@@ -507,6 +507,8 @@ def numpy_add_at(LDM, k, l, m, I):
     import radis_cython_extensions as rcx
 except (ModuleNotFoundError, ValueError):
     add_at = numpy_add_at
+    """Wrapper to :py:func`radis.misc.arrays.numpy_add_at` or to the Radis
+    Cython version  (here, the numpy version was loaded)"""
     #  or use radis.misc.utils.NotInstalled() ?
 # EP: Also got (after switching back to former Cython version) :
 #     File "radis\cython\radis_cython_extensions.pyx", line 1, in init radis_cython_extensions
@@ -514,6 +516,8 @@ def numpy_add_at(LDM, k, l, m, I):
 # we may consider escaping this.
 else:
     add_at = rcx.add_at
+    """Wrapper to :py:func`radis.misc.arrays.numpy_add_at` or to the Radis
+    Cython version (here, the Cython version was loaded)"""
 
 
 # @numba.njit
diff --git a/radis/spectrum/models.py b/radis/spectrum/models.py
index 232159efd..f4aff0a98 100644
--- a/radis/spectrum/models.py
+++ b/radis/spectrum/models.py
@@ -79,14 +79,14 @@ def calculated_spectrum(
 
     Examples
     --------
-
     ::
 
         # w, I are numpy arrays for wavelength and radiance
         from radis import calculated_spectrum
         s = calculated_spectrum(w, I, wunit='nm', Iunit='W/cm2/sr/nm')     # creates 'radiance_noslit'
 
-
+    .. minigallery:: radis.calculated_spectrum
+        :add-heading:
 
     See Also
     --------
@@ -149,6 +149,9 @@ def transmittance_spectrum(
         from radis import transmittance_spectrum
         s2 = transmittance_spectrum(w, T, wunit='nm')                       # creates 'transmittance_noslit'
 
+    .. minigallery:: radis.transmittance_spectrum
+        :add-heading:
+
 
     See Also
     --------
@@ -212,6 +215,8 @@ def experimental_spectrum(
         s = experimental_spectrum(w, I, Iunit='mW/cm2/sr/nm')             # creates 'radiance'
         s.plot()
 
+    .. minigallery:: radis.experimental_spectrum
+        :add-heading:
 
     See Also
     --------
diff --git a/radis/spectrum/utils.py b/radis/spectrum/utils.py
index 4d8065fd6..18f35e870 100644
--- a/radis/spectrum/utils.py
+++ b/radis/spectrum/utils.py
@@ -594,6 +594,8 @@ def walk_print_tree(prof, name, level, write_number_column):
 def generate_perf_profile(profiler):
     """Visual/interactive performance profile
 
+    Requires ``tuna`` to be installed.
+
     See typical output in https://github.com/radis/radis/pull/325
 
     .. image:: https://user-images.githubusercontent.com/16088743/128018032-6049be72-1881-46ac-9d7c-1ed89f9c4f42.png
diff --git a/setup.py b/setup.py
index 22897d424..7ba1f9679 100644
--- a/setup.py
+++ b/setup.py
@@ -276,7 +276,7 @@ def run_setup(with_binary):
             "psutil",  # for getting user RAM
             "seaborn",  # other matplotlib themes
             "scipy>=1.4.0",
-            "tuna",  # to generate visual/interactive performance profiles
+            # "tuna",  # to generate visual/interactive performance profiles
             "vaex>=4.9.2",  # load HDF5 files  (version needed to fix https://github.com/radis/radis/issues/486). #TODO : install only required sub-packages
         ],
         extras_require={


Test patch:
diff --git a/radis/test/db/test_molparams.py b/radis/test/db/test_molparams.py
index e4a17e880..c593e4dc0 100644
--- a/radis/test/db/test_molparams.py
+++ b/radis/test/db/test_molparams.py
@@ -1,11 +1,9 @@
 # -*- coding: utf-8 -*-
 """
-Created on Wed Jul 21 00:47:30 2021
 
-@author: erwan
 """
 
-from radis.db.molparam import MolParams
+from radis.db.molparam import MOLPARAMS_EXTRA_PATH, MolParams
 
 
 def test_molparams(verbose=True, *args, **kwargs):
@@ -13,6 +11,25 @@ def test_molparams(verbose=True, *args, **kwargs):
     molpar = MolParams()
 
     assert molpar.get(2, 2, "abundance") == 0.0110574
+    assert molpar.get("CO2", 1, "molar_mass") == 43.98983
+
+    # Test errors :
+    import pytest
+
+    with pytest.raises(NotImplementedError):
+        molpar.get("C20H25N3O", 1, "molar_mass")
+
+    # Test reading of extra parameters
+    import pytest
+
+    molpar = MolParams(extra_file_json=None)
+    with pytest.raises(NotImplementedError):
+        molpar.get("trans-P2H2", 1, "molar_mass") == 43.98983
+
+    molpar = MolParams(extra_file_json=MOLPARAMS_EXTRA_PATH)
+    assert "abundance" in molpar.extra_molparams
+    assert "molar_mass" in molpar.extra_molparams
+    assert molpar.get("trans-P2H2", 1, "molar_mass") == 63.9631740604
 
 
 if __name__ == "__main__":
diff --git a/radis/test/misc/test_utils.py b/radis/test/misc/test_utils.py
index fe4b7de30..b622c8bce 100644
--- a/radis/test/misc/test_utils.py
+++ b/radis/test/misc/test_utils.py
@@ -35,6 +35,9 @@ def test_files_from_regex_1(*args, **kwargs):
         "hitran_co_3iso_2000_2300cm.par",
         "hitran_CO2_fragment.par",
     ]
+
+    assert len(path_test) == len(path_actual)
+
     path_actual.sort()
     path_test.sort()
 
diff --git a/radis/test/spectrum/test_utils.py b/radis/test/spectrum/test_utils.py
index e58b1ca8d..bf57d0c59 100644
--- a/radis/test/spectrum/test_utils.py
+++ b/radis/test/spectrum/test_utils.py
@@ -5,9 +5,9 @@
 @author: erwan
 """
 
-import os
-import os.path
-import time
+# import os
+# import os.path
+# import time
 
 
 def test_perf_profile(*args, **kwargs):
@@ -41,16 +41,19 @@ def test_perf_profile(*args, **kwargs):
                 calc_hwhm                        0.007s
                 generate_wavenumber_arrays       0.001s
                 calc_line_broadening             0.074s ██████
-                    precompute_LDM_lineshapes        0.012s
-                    LDM_Initialized_vectors          0.000s
-                    LDM_closest_matching_line        0.001s
-                    LDM_Distribute_lines             0.001s
-                    LDM_convolve                     0.060s █████
+                    precompute_DLM_lineshapes        0.012s
+                    DLM_Initialized_vectors          0.000s
+                    DLM_closest_matching_line        0.001s
+                    DLM_Distribute_lines             0.001s
+                    DLM_convolve                     0.060s █████
                     others                           0.001s
                 calc_other_spectral_quan         0.003s
                 generate_spectrum_obj            0.000s
                 others                           -0.016s
+
+    Generate a graphical, explorative perf profile (requires ``tuna`` installed)
     ::
+
         s.generate_perf_profile()
 
     See output of :py:meth:`~radis.spectrum.spectrum.Spectrum.generate_perf_profile`
@@ -79,17 +82,18 @@ def test_perf_profile(*args, **kwargs):
     # Test Console profiler
     s.print_perf_profile()
 
-    # Test interactive profiler
-    if os.path.exists("spectrum.prof"):
-        os.remove("spectrum.prof")
-    s.generate_perf_profile()
-    time.sleep(
-        5
-    )  # note @dev: would be better to wait for the subprocess to end; however it won't even if the window is closed
-    with open("spectrum.prof", "rb") as f:
-        assert "calculation_time" in str(f.read())
+    # EP 28/08/22 : starting from Radis 0.13.1 we do not test Tuna anymore.
+    # # Test interactive profiler
+    # if os.path.exists("spectrum.prof"):
+    #     os.remove("spectrum.prof")
+    # s.generate_perf_profile()
+    # time.sleep(
+    #     5
+    # )  # note @dev: would be better to wait for the subprocess to end; however it won't even if the window is closed
+    # with open("spectrum.prof", "rb") as f:
+    #     assert "calculation_time" in str(f.read())
 
-    os.remove("spectrum.prof")
+    # os.remove("spectrum.prof")
 
 
 def test_perf_profile_from_factory(*args, **kwargs):
@@ -112,17 +116,18 @@ def test_perf_profile_from_factory(*args, **kwargs):
     # Test Console profiler
     sf.print_perf_profile()
 
-    # Test interactive profiler
-    if os.path.exists("spectrum.prof"):
-        os.remove("spectrum.prof")
-    sf.generate_perf_profile()
-    time.sleep(
-        5
-    )  # note @dev: would be better to wait for the subprocess to end; however it won't even if the window is closed
-    with open("spectrum.prof", "rb") as f:
-        assert "calculation_time" in str(f.read())
-
-    os.remove("spectrum.prof")
+    # EP 28/08/22 : starting from Radis 0.13.1 we do not test Tuna anymore.
+    # # Test interactive profiler
+    # if os.path.exists("spectrum.prof"):
+    #     os.remove("spectrum.prof")
+    # sf.generate_perf_profile()
+    # time.sleep(
+    #     5
+    # )  # note @dev: would be better to wait for the subprocess to end; however it won't even if the window is closed
+    # with open("spectrum.prof", "rb") as f:
+    #     assert "calculation_time" in str(f.read())
+
+    # os.remove("spectrum.prof")
 
 
 if __name__ == "__main__":