Skip to content

Instantly share code, notes, and snippets.

@epassaro
Last active October 31, 2022 19:07
Show Gist options
  • Save epassaro/b440b44e2187e361c1cd88c7b0e625df to your computer and use it in GitHub Desktop.
Save epassaro/b440b44e2187e361c1cd88c7b0e625df to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "7acb1f35",
"metadata": {},
"source": [
"In this notebook we will try to show why is necessary matching of levels with CMFGEN collisions in the `output` module.\n",
"\n",
"### Level index at reader stage\n",
"\n",
"First, create an instance of `GFALLReader` and check the `levels` and `lines` dataframes."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1121a2c4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ChiantiPy version 0.8.4 \n",
" found PyQt5 widgets\n",
" using PyQt5 widgets\n",
"[\u001b[1m carsus.io.kurucz.gfall\u001b[0m][\u001b[1;33mWARNING\u001b[0m] - A specific combination to identify unique levels from GFALL data has not been given. Defaulting to [\"energy\", \"j\"]. (\u001b[1mgfall.py\u001b[0m:93)\n"
]
}
],
"source": [
"from carsus.io.kurucz import GFALLReader\n",
"\n",
"gfall_reader = GFALLReader(\"H-C\", \"/home/epassaro/Desktop/tardis-sn/atomic_data/GFALL/gfall_latest.dat\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "2ca13638",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1m carsus.io.kurucz.gfall\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Parsing GFALL from: /home/epassaro/Desktop/tardis-sn/atomic_data/GFALL/gfall_latest.dat (\u001b[1mgfall.py\u001b[0m:146)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>energy</th>\n",
" <th>j</th>\n",
" <th>label</th>\n",
" <th>method</th>\n",
" <th>priority</th>\n",
" </tr>\n",
" <tr>\n",
" <th>atomic_number</th>\n",
" <th>ion_charge</th>\n",
" <th>level_index</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">2</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>0.000</td>\n",
" <td>0.0</td>\n",
" <td>s2 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>159856.069</td>\n",
" <td>1.0</td>\n",
" <td>2s 3S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>166277.546</td>\n",
" <td>0.0</td>\n",
" <td>2s 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>169086.864</td>\n",
" <td>2.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>169086.940</td>\n",
" <td>1.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">6</th>\n",
" <th rowspan=\"5\" valign=\"top\">3</th>\n",
" <th>31</th>\n",
" <td>483950.800</td>\n",
" <td>1.5</td>\n",
" <td>7p *2P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>484320.600</td>\n",
" <td>1.5</td>\n",
" <td>7d 2D</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>484320.600</td>\n",
" <td>2.5</td>\n",
" <td>7d 2D</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>492477.700</td>\n",
" <td>0.5</td>\n",
" <td>8p *2P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>492479.300</td>\n",
" <td>1.5</td>\n",
" <td>8p *2P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2394 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" energy j label method priority\n",
"atomic_number ion_charge level_index \n",
"2 0 0 0.000 0.0 s2 1S meas 10\n",
" 1 159856.069 1.0 2s 3S meas 10\n",
" 2 166277.546 0.0 2s 1S meas 10\n",
" 3 169086.864 2.0 2p 3P meas 10\n",
" 4 169086.940 1.0 2p 3P meas 10\n",
"... ... ... ... ... ...\n",
"6 3 31 483950.800 1.5 7p *2P meas 10\n",
" 32 484320.600 1.5 7d 2D meas 10\n",
" 33 484320.600 2.5 7d 2D meas 10\n",
" 34 492477.700 0.5 8p *2P meas 10\n",
" 35 492479.300 1.5 8p *2P meas 10\n",
"\n",
"[2394 rows x 5 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gfall_reader.levels"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f4a5876c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>energy</th>\n",
" <th>j</th>\n",
" <th>label</th>\n",
" <th>method</th>\n",
" <th>priority</th>\n",
" </tr>\n",
" <tr>\n",
" <th>level_index</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.000</td>\n",
" <td>0.0</td>\n",
" <td>s2 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>159856.069</td>\n",
" <td>1.0</td>\n",
" <td>2s 3S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>166277.546</td>\n",
" <td>0.0</td>\n",
" <td>2s 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>169086.864</td>\n",
" <td>2.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>169086.940</td>\n",
" <td>1.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>739</th>\n",
" <td>198293.597</td>\n",
" <td>2.0</td>\n",
" <td>80p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>740</th>\n",
" <td>198293.616</td>\n",
" <td>3.0</td>\n",
" <td>80d 3D</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>741</th>\n",
" <td>198293.616</td>\n",
" <td>4.0</td>\n",
" <td>80f 3F</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>742</th>\n",
" <td>198293.617</td>\n",
" <td>2.0</td>\n",
" <td>80d 1D</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>743</th>\n",
" <td>198293.621</td>\n",
" <td>1.0</td>\n",
" <td>80p 1P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>744 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" energy j label method priority\n",
"level_index \n",
"0 0.000 0.0 s2 1S meas 10\n",
"1 159856.069 1.0 2s 3S meas 10\n",
"2 166277.546 0.0 2s 1S meas 10\n",
"3 169086.864 2.0 2p 3P meas 10\n",
"4 169086.940 1.0 2p 3P meas 10\n",
"... ... ... ... ... ...\n",
"739 198293.597 2.0 80p 3P meas 10\n",
"740 198293.616 3.0 80d 3D meas 10\n",
"741 198293.616 4.0 80f 3F meas 10\n",
"742 198293.617 2.0 80d 1D meas 10\n",
"743 198293.621 1.0 80p 1P meas 10\n",
"\n",
"[744 rows x 5 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gfall_reader.levels.loc[(2,0)]"
]
},
{
"cell_type": "markdown",
"id": "d65746ea",
"metadata": {},
"source": [
"Notice that `levels` dataframe has a index called `level_index`. This index goes from 0 to N for every ion. We can think about it as the number of levels for a given ion taken from the GFALL source."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "7845a63f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n",
" ...\n",
" 734, 735, 736, 737, 738, 739, 740, 741, 742, 743],\n",
" dtype='int64', name='level_index', length=744)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For `He`\n",
"gfall_reader.levels.loc[(2,0)].index"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "da05d38a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
" 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n",
" 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66],\n",
" dtype='int64', name='level_index')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For `Li`\n",
"gfall_reader.levels.loc[(3,0)].index"
]
},
{
"cell_type": "markdown",
"id": "a47297db",
"metadata": {},
"source": [
"In the `lines` dataframe we have **transitions**, from `level_index_lower` to `level_index_upper`. These values come from the corresponding `level_index` on the `levels` dataframe."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "77558937",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1m carsus.io.kurucz.gfall\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Extracting line data: atomic_number, ion_charge, energy_lower, j_lower, energy_upper, j_upper, wavelength, loggf. (\u001b[1mgfall.py\u001b[0m:341)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>energy_lower</th>\n",
" <th>energy_upper</th>\n",
" <th>gf</th>\n",
" <th>j_lower</th>\n",
" <th>j_upper</th>\n",
" <th>wavelength</th>\n",
" </tr>\n",
" <tr>\n",
" <th>atomic_number</th>\n",
" <th>ion_charge</th>\n",
" <th>level_index_lower</th>\n",
" <th>level_index_upper</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">2</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>743</th>\n",
" <td>0.0</td>\n",
" <td>198293.621</td>\n",
" <td>0.000004</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.4303</td>\n",
" </tr>\n",
" <tr>\n",
" <th>735</th>\n",
" <td>0.0</td>\n",
" <td>198293.185</td>\n",
" <td>0.000004</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.4304</td>\n",
" </tr>\n",
" <tr>\n",
" <th>727</th>\n",
" <td>0.0</td>\n",
" <td>198292.731</td>\n",
" <td>0.000004</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.4305</td>\n",
" </tr>\n",
" <tr>\n",
" <th>718</th>\n",
" <td>0.0</td>\n",
" <td>198292.260</td>\n",
" <td>0.000005</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.4306</td>\n",
" </tr>\n",
" <tr>\n",
" <th>710</th>\n",
" <td>0.0</td>\n",
" <td>198291.770</td>\n",
" <td>0.000005</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.4307</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">6</th>\n",
" <th rowspan=\"5\" valign=\"top\">3</th>\n",
" <th rowspan=\"2\" valign=\"top\">24</th>\n",
" <th>26</th>\n",
" <td>470778.9</td>\n",
" <td>471371.500</td>\n",
" <td>0.704693</td>\n",
" <td>1.5</td>\n",
" <td>2.5</td>\n",
" <td>16870.1890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>470778.9</td>\n",
" <td>471370.300</td>\n",
" <td>0.077268</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>16904.4210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <th>32</th>\n",
" <td>483948.4</td>\n",
" <td>484320.600</td>\n",
" <td>0.463447</td>\n",
" <td>0.5</td>\n",
" <td>1.5</td>\n",
" <td>26859.9530</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">31</th>\n",
" <th>32</th>\n",
" <td>483950.8</td>\n",
" <td>484320.600</td>\n",
" <td>0.092470</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>27034.2740</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>483950.8</td>\n",
" <td>484320.600</td>\n",
" <td>0.843335</td>\n",
" <td>1.5</td>\n",
" <td>2.5</td>\n",
" <td>27034.2740</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>12469 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" energy_lower \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 0.0 \n",
" 735 0.0 \n",
" 727 0.0 \n",
" 718 0.0 \n",
" 710 0.0 \n",
"... ... \n",
"6 3 24 26 470778.9 \n",
" 25 470778.9 \n",
" 30 32 483948.4 \n",
" 31 32 483950.8 \n",
" 33 483950.8 \n",
"\n",
" energy_upper \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 198293.621 \n",
" 735 198293.185 \n",
" 727 198292.731 \n",
" 718 198292.260 \n",
" 710 198291.770 \n",
"... ... \n",
"6 3 24 26 471371.500 \n",
" 25 471370.300 \n",
" 30 32 484320.600 \n",
" 31 32 484320.600 \n",
" 33 484320.600 \n",
"\n",
" gf \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 0.000004 \n",
" 735 0.000004 \n",
" 727 0.000004 \n",
" 718 0.000005 \n",
" 710 0.000005 \n",
"... ... \n",
"6 3 24 26 0.704693 \n",
" 25 0.077268 \n",
" 30 32 0.463447 \n",
" 31 32 0.092470 \n",
" 33 0.843335 \n",
"\n",
" j_lower \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 0.0 \n",
" 735 0.0 \n",
" 727 0.0 \n",
" 718 0.0 \n",
" 710 0.0 \n",
"... ... \n",
"6 3 24 26 1.5 \n",
" 25 1.5 \n",
" 30 32 0.5 \n",
" 31 32 1.5 \n",
" 33 1.5 \n",
"\n",
" j_upper \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 1.0 \n",
" 735 1.0 \n",
" 727 1.0 \n",
" 718 1.0 \n",
" 710 1.0 \n",
"... ... \n",
"6 3 24 26 2.5 \n",
" 25 1.5 \n",
" 30 32 1.5 \n",
" 31 32 1.5 \n",
" 33 2.5 \n",
"\n",
" wavelength \n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"2 0 0 743 50.4303 \n",
" 735 50.4304 \n",
" 727 50.4305 \n",
" 718 50.4306 \n",
" 710 50.4307 \n",
"... ... \n",
"6 3 24 26 16870.1890 \n",
" 25 16904.4210 \n",
" 30 32 26859.9530 \n",
" 31 32 27034.2740 \n",
" 33 27034.2740 \n",
"\n",
"[12469 rows x 6 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gfall_reader.lines"
]
},
{
"cell_type": "markdown",
"id": "669df109",
"metadata": {},
"source": [
"Now, instantiate the Chianti reader. Looks like both readers have the same structure."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "86c797a6",
"metadata": {},
"outputs": [],
"source": [
"from carsus.io.chianti_ import ChiantiReader"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "997aa83a",
"metadata": {},
"outputs": [],
"source": [
"chianti_reader = ChiantiReader(\"H-He\", collisions=True, priority=20)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "6478b621",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>energy</th>\n",
" <th>j</th>\n",
" <th>label</th>\n",
" <th>method</th>\n",
" <th>priority</th>\n",
" </tr>\n",
" <tr>\n",
" <th>atomic_number</th>\n",
" <th>ion_charge</th>\n",
" <th>level_index</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>0.000</td>\n",
" <td>0.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>82258.956</td>\n",
" <td>0.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>82258.921</td>\n",
" <td>0.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>82259.287</td>\n",
" <td>1.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>97492.224</td>\n",
" <td>0.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">2</th>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th>20</th>\n",
" <td>421353.185</td>\n",
" <td>2.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>421353.185</td>\n",
" <td>2.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>421353.247</td>\n",
" <td>3.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>421353.247</td>\n",
" <td>3.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>421353.284</td>\n",
" <td>4.5</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>20</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>99 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" energy j label method priority\n",
"atomic_number ion_charge level_index \n",
"1 0 0 0.000 0.5 NaN None 20\n",
" 1 82258.956 0.5 NaN None 20\n",
" 2 82258.921 0.5 NaN None 20\n",
" 3 82259.287 1.5 NaN None 20\n",
" 4 97492.224 0.5 NaN None 20\n",
"... ... ... ... ... ...\n",
"2 1 20 421353.185 2.5 NaN None 20\n",
" 21 421353.185 2.5 NaN None 20\n",
" 22 421353.247 3.5 NaN None 20\n",
" 23 421353.247 3.5 NaN None 20\n",
" 24 421353.284 4.5 NaN None 20\n",
"\n",
"[99 rows x 5 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"chianti_reader.levels"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "5249753f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>energy_upper</th>\n",
" <th>j_upper</th>\n",
" <th>energy_lower</th>\n",
" <th>j_lower</th>\n",
" <th>wavelength</th>\n",
" <th>gf</th>\n",
" </tr>\n",
" <tr>\n",
" <th>atomic_number</th>\n",
" <th>ion_charge</th>\n",
" <th>level_index_lower</th>\n",
" <th>level_index_upper</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>1</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>121.5673</td>\n",
" <td>0.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>121.5674</td>\n",
" <td>0.2780</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>121.5668</td>\n",
" <td>0.5550</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>102.5723</td>\n",
" <td>0.0527</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>102.5722</td>\n",
" <td>0.1050</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">2</th>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th rowspan=\"3\" valign=\"top\">13</th>\n",
" <th>18</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>1012.6626</td>\n",
" <td>0.1669</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>1012.6499</td>\n",
" <td>0.2544</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>1012.6436</td>\n",
" <td>5.0880</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <th>23</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>1012.6436</td>\n",
" <td>8.0760</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <th>24</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>1012.6523</td>\n",
" <td>10.4700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>320 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" energy_upper \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 None \n",
" 2 None \n",
" 3 None \n",
" 5 None \n",
" 6 None \n",
"... ... \n",
"2 1 13 18 None \n",
" 21 None \n",
" 22 None \n",
" 14 23 None \n",
" 15 24 None \n",
"\n",
" j_upper \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 None \n",
" 2 None \n",
" 3 None \n",
" 5 None \n",
" 6 None \n",
"... ... \n",
"2 1 13 18 None \n",
" 21 None \n",
" 22 None \n",
" 14 23 None \n",
" 15 24 None \n",
"\n",
" energy_lower \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 None \n",
" 2 None \n",
" 3 None \n",
" 5 None \n",
" 6 None \n",
"... ... \n",
"2 1 13 18 None \n",
" 21 None \n",
" 22 None \n",
" 14 23 None \n",
" 15 24 None \n",
"\n",
" j_lower \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 None \n",
" 2 None \n",
" 3 None \n",
" 5 None \n",
" 6 None \n",
"... ... \n",
"2 1 13 18 None \n",
" 21 None \n",
" 22 None \n",
" 14 23 None \n",
" 15 24 None \n",
"\n",
" wavelength \\\n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 121.5673 \n",
" 2 121.5674 \n",
" 3 121.5668 \n",
" 5 102.5723 \n",
" 6 102.5722 \n",
"... ... \n",
"2 1 13 18 1012.6626 \n",
" 21 1012.6499 \n",
" 22 1012.6436 \n",
" 14 23 1012.6436 \n",
" 15 24 1012.6523 \n",
"\n",
" gf \n",
"atomic_number ion_charge level_index_lower level_index_upper \n",
"1 0 0 1 0.0000 \n",
" 2 0.2780 \n",
" 3 0.5550 \n",
" 5 0.0527 \n",
" 6 0.1050 \n",
"... ... \n",
"2 1 13 18 0.1669 \n",
" 21 0.2544 \n",
" 22 5.0880 \n",
" 14 23 8.0760 \n",
" 15 24 10.4700 \n",
"\n",
"[320 rows x 6 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"chianti_reader.lines"
]
},
{
"cell_type": "markdown",
"id": "73122068",
"metadata": {},
"source": [
"### And now what? \n",
"\n",
"Well, in the past Carsus used a SQL database to store everything before creating a TARDIS atomic file. **But the most important thing to know about this is the data was stacked.** \n",
"\n",
"For example, if you choosed levels and lines from GFALL and CHIANTI, the levels data was stored in a table starting with all the rows from GFALL, then all the rows from CHIANTI, and finally the rows from NIST (ground levels).\n",
"\n",
"In Carsus-SQL you were required to select ions while instantiating the old `AtomData` class. This step took a subset of all the ingested levels and lines and created the dataframe required for TARDIS. You could grab a lot of levels and lines at the ingester stage (even more than a source per ion), but in the end the Carsus-SQL took just one source per ion (prioritizing NIST > Chianti > GFALL).\n",
"\n",
"The SQL database is not used anymore, but this \"stacked\" structure is still used in the `output` module, in order to get the exact same results than the previous versions of Carsus.\n",
"\n",
"Let's create an atomic file from the beggining with the NEW code!"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "00eefff7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1m carsus.io.nist.weightscomp\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Downloading data from the NIST Atomic Weights and Isotopic Compositions Database. (\u001b[1mweightscomp.py\u001b[0m:49)\n",
"[\u001b[1m carsus.io.nist.ionization\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Downloading ionization energies from the NIST Atomic Spectra Database. (\u001b[1mionization.py\u001b[0m:63)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Ingesting energy levels. (\u001b[1mbase.py\u001b[0m:327)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - GFALL selected species: Li 0, Li 1, Be 0, Be 1, Be 2, B 0, B 1, B 2, B 3, C 0, C 1, C 2, C 3. (\u001b[1mbase.py\u001b[0m:361)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Chianti selected species: H 0, He 0, He 1. (\u001b[1mbase.py\u001b[0m:365)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Ingesting transition lines. (\u001b[1mbase.py\u001b[0m:423)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Matching levels and lines. (\u001b[1mbase.py\u001b[0m:462)\n",
"[\u001b[1m py.warnings\u001b[0m][\u001b[1;33mWARNING\u001b[0m] - /home/epassaro/.conda/envs/carsus/lib/python3.7/site-packages/pandas/core/series.py:679: RuntimeWarning: divide by zero encountered in log10\n",
" result = getattr(ufunc, method)(*inputs, **kwargs)\n",
" (\u001b[1mwarnings.py\u001b[0m:110)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Ingesting collisional strengths. (\u001b[1mbase.py\u001b[0m:616)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Matching collisions and levels. (\u001b[1mbase.py\u001b[0m:628)\n",
"[\u001b[1m carsus.io.output.base\u001b[0m][ \u001b[1;37mINFO\u001b[0m] - Finished. (\u001b[1mbase.py\u001b[0m:107)\n"
]
}
],
"source": [
"from carsus.io.nist import NISTWeightsComp, NISTIonizationEnergies\n",
"from carsus.io.zeta import KnoxLongZeta\n",
"from carsus.io.output import TARDISAtomData\n",
"\n",
"atomic_weights = NISTWeightsComp()\n",
"ionization_energies = NISTIonizationEnergies('H-C')\n",
"zeta_data = KnoxLongZeta()\n",
"\n",
"# TARDISAtomData, the \"new\" output class\n",
"atom_data = TARDISAtomData(atomic_weights,\n",
" ionization_energies,\n",
" gfall_reader, # H-C\n",
" zeta_data,\n",
" chianti_reader) # H-He"
]
},
{
"cell_type": "markdown",
"id": "2b471739",
"metadata": {},
"source": [
"Check the `levels_all` attribute."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "bab4af99",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>level_id</th>\n",
" <th>atomic_number</th>\n",
" <th>ion_number</th>\n",
" <th>g</th>\n",
" <th>energy</th>\n",
" <th>ds_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>10</td>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>15</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>21</td>\n",
" <td>6</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1741</th>\n",
" <td>2510</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" <td>52.241136</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1742</th>\n",
" <td>2511</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" <td>52.241136</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1743</th>\n",
" <td>2512</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>52.241144</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1744</th>\n",
" <td>2513</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>52.241144</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1745</th>\n",
" <td>2514</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" <td>52.241149</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1746 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" level_id atomic_number ion_number g energy ds_id\n",
"0 6 3 2 2 0.000000 1\n",
"1 10 4 3 2 0.000000 1\n",
"2 15 5 4 2 0.000000 1\n",
"3 20 6 4 1 0.000000 1\n",
"4 21 6 5 2 0.000000 1\n",
"... ... ... ... .. ... ...\n",
"1741 2510 2 1 6 52.241136 4\n",
"1742 2511 2 1 6 52.241136 4\n",
"1743 2512 2 1 8 52.241144 4\n",
"1744 2513 2 1 8 52.241144 4\n",
"1745 2514 2 1 10 52.241149 4\n",
"\n",
"[1746 rows x 6 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"atom_data.levels_all"
]
},
{
"cell_type": "markdown",
"id": "c8054e94",
"metadata": {},
"source": [
"Yes, it's another confusing index-like column called `level_id`.\n",
"\n",
"Notice the data is ordered based on the `ds_id` (data source identification number: `1: NIST, 2: GFALL, 3: KNOX LONG, 4: CHIANTI, 5: CMFGEN`), then on `atomic_number`, `ion_number` and `level_id`. But where does this `level_id` come from? Look at line 377 of `carsus/output/base.py`:\n",
"\n",
"```python\n",
" levels['level_id'] = range(1, len(levels)+1)\n",
"```\n",
"\n",
"It's just a list of integers from 1 to N+1. So, we just ordered ALL the levels and then assigned a number. After that, the levels are filtered by `priority` allowing just one source for every ion, so we just end with \"less numbers\" in the `level_id` column.\n",
"\n",
"Then, we should have rows for `Li-C` at the top and `H-He` at the bottom, since `H-He` from GFALL have been superseeded by Chianti with the new `priority` parameter. "
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "05f0f223",
"metadata": {},
"outputs": [],
"source": [
"levels_all_by_source = atom_data.levels_all.set_index([\"ds_id\"])"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "fbd40c82",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>level_id</th>\n",
" <th>atomic_number</th>\n",
" <th>ion_number</th>\n",
" <th>g</th>\n",
" <th>energy</th>\n",
" </tr>\n",
" <tr>\n",
" <th>ds_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>774</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>775</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>4.959368e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>776</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>9.918736e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>777</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>2.479684e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>778</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>4.215463e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2411</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6.000225e+01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2412</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6.004810e+01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2413</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>6.004810e+01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2414</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>6.105945e+01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2415</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>6.105965e+01</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1642 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" level_id atomic_number ion_number g energy\n",
"ds_id \n",
"2 774 3 0 2 0.000000e+00\n",
"2 775 3 0 2 4.959368e-07\n",
"2 776 3 0 2 9.918736e-07\n",
"2 777 3 0 2 2.479684e-06\n",
"2 778 3 0 2 4.215463e-06\n",
"... ... ... ... .. ...\n",
"2 2411 6 3 4 6.000225e+01\n",
"2 2412 6 3 4 6.004810e+01\n",
"2 2413 6 3 6 6.004810e+01\n",
"2 2414 6 3 2 6.105945e+01\n",
"2 2415 6 3 4 6.105965e+01\n",
"\n",
"[1642 rows x 5 columns]"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"levels_all_by_source.loc[2]"
]
},
{
"cell_type": "markdown",
"id": "8bdafb2b",
"metadata": {},
"source": [
"First ion from GFALL is `Li I` according to our priorities, and first `level_id` from GFALL is 774. Why? Well, because Carsus discarded 774 levels: 0 from GFALL `H` (no data available), 752 from GFALL `He I` and `II` and 21 from NIST."
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "e1ef6eb4",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>energy</th>\n",
" <th>j</th>\n",
" <th>label</th>\n",
" <th>method</th>\n",
" <th>priority</th>\n",
" <th>ds_id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>ion_charge</th>\n",
" <th>level_index</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>0.000</td>\n",
" <td>0.0</td>\n",
" <td>s2 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>159856.069</td>\n",
" <td>1.0</td>\n",
" <td>2s 3S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>166277.546</td>\n",
" <td>0.0</td>\n",
" <td>2s 1S</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>169086.864</td>\n",
" <td>2.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>169086.940</td>\n",
" <td>1.0</td>\n",
" <td>2p 3P</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th>3</th>\n",
" <td>390140.803</td>\n",
" <td>0.5</td>\n",
" <td>3P 2P 164</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>390140.942</td>\n",
" <td>0.5</td>\n",
" <td>3S 2S 164</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>390142.535</td>\n",
" <td>1.5</td>\n",
" <td>3D 2D 164</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>390142.538</td>\n",
" <td>1.5</td>\n",
" <td>3P 2P 164</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>390143.114</td>\n",
" <td>2.5</td>\n",
" <td>3D 2D 164</td>\n",
" <td>meas</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>752 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" energy j label method priority ds_id\n",
"ion_charge level_index \n",
"0 0 0.000 0.0 s2 1S meas 10 2\n",
" 1 159856.069 1.0 2s 3S meas 10 2\n",
" 2 166277.546 0.0 2s 1S meas 10 2\n",
" 3 169086.864 2.0 2p 3P meas 10 2\n",
" 4 169086.940 1.0 2p 3P meas 10 2\n",
"... ... ... ... ... ... ...\n",
"1 3 390140.803 0.5 3P 2P 164 meas 10 2\n",
" 4 390140.942 0.5 3S 2S 164 meas 10 2\n",
" 5 390142.535 1.5 3D 2D 164 meas 10 2\n",
" 6 390142.538 1.5 3P 2P 164 meas 10 2\n",
" 7 390143.114 2.5 3D 2D 164 meas 10 2\n",
"\n",
"[752 rows x 6 columns]"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gfall_reader.levels.loc[(2,)] # these levels were superseeded by the higher Chianti priority"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "75caea97",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(21, 4)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ionization_energies.get_ground_levels().shape"
]
},
{
"cell_type": "markdown",
"id": "9e64e26b",
"metadata": {},
"source": [
"Ok, so we know how levels are treated in Carsus. But what about lines, collisions and cross-sections?\n",
"\n",
"Well, of course we can't take lines from one source and the levels from another source for the same ion.\n",
"\n",
"For example, all the selected lines (from all sources) are also stacked in the `lines_all`. I assume you already have an idea about what are `lower_level_id` and `upper_level_id` means."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "587a971f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>lower_level_id</th>\n",
" <th>upper_level_id</th>\n",
" <th>wavelength</th>\n",
" <th>gf</th>\n",
" <th>loggf</th>\n",
" <th>ds_id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>line_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1628</th>\n",
" <td>774</td>\n",
" <td>840</td>\n",
" <td>2340.871283</td>\n",
" <td>0.000258</td>\n",
" <td>-3.588000</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1629</th>\n",
" <td>774</td>\n",
" <td>839</td>\n",
" <td>2340.871283</td>\n",
" <td>0.000129</td>\n",
" <td>-3.888000</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1630</th>\n",
" <td>774</td>\n",
" <td>838</td>\n",
" <td>2349.122122</td>\n",
" <td>0.000463</td>\n",
" <td>-3.334000</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1631</th>\n",
" <td>774</td>\n",
" <td>837</td>\n",
" <td>2349.122122</td>\n",
" <td>0.000232</td>\n",
" <td>-3.634000</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1632</th>\n",
" <td>774</td>\n",
" <td>835</td>\n",
" <td>2359.650475</td>\n",
" <td>0.000288</td>\n",
" <td>-3.541000</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12785</th>\n",
" <td>2503</td>\n",
" <td>2508</td>\n",
" <td>10126.626000</td>\n",
" <td>0.166900</td>\n",
" <td>-0.777544</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12786</th>\n",
" <td>2503</td>\n",
" <td>2511</td>\n",
" <td>10126.499000</td>\n",
" <td>0.254400</td>\n",
" <td>-0.594483</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12787</th>\n",
" <td>2503</td>\n",
" <td>2512</td>\n",
" <td>10126.436000</td>\n",
" <td>5.088000</td>\n",
" <td>0.706547</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12788</th>\n",
" <td>2504</td>\n",
" <td>2513</td>\n",
" <td>10126.436000</td>\n",
" <td>8.076000</td>\n",
" <td>0.907196</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12789</th>\n",
" <td>2505</td>\n",
" <td>2514</td>\n",
" <td>10126.523000</td>\n",
" <td>10.470000</td>\n",
" <td>1.019947</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>11162 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" lower_level_id upper_level_id wavelength gf loggf \\\n",
"line_id \n",
"1628 774 840 2340.871283 0.000258 -3.588000 \n",
"1629 774 839 2340.871283 0.000129 -3.888000 \n",
"1630 774 838 2349.122122 0.000463 -3.334000 \n",
"1631 774 837 2349.122122 0.000232 -3.634000 \n",
"1632 774 835 2359.650475 0.000288 -3.541000 \n",
"... ... ... ... ... ... \n",
"12785 2503 2508 10126.626000 0.166900 -0.777544 \n",
"12786 2503 2511 10126.499000 0.254400 -0.594483 \n",
"12787 2503 2512 10126.436000 5.088000 0.706547 \n",
"12788 2504 2513 10126.436000 8.076000 0.907196 \n",
"12789 2505 2514 10126.523000 10.470000 1.019947 \n",
"\n",
" ds_id \n",
"line_id \n",
"1628 2 \n",
"1629 2 \n",
"1630 2 \n",
"1631 2 \n",
"1632 2 \n",
"... ... \n",
"12785 4 \n",
"12786 4 \n",
"12787 4 \n",
"12788 4 \n",
"12789 4 \n",
"\n",
"[11162 rows x 6 columns]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"atom_data.lines_all"
]
},
{
"cell_type": "markdown",
"id": "c5707b10",
"metadata": {},
"source": [
"In the `_get_all_lines_data` method the filtering by priority occurs and most important the **matching** against the corresponding levels with `get_lvl_index2id`. Something similar is made for Chianti collisions and cross-sections.\n",
"\n",
"But wait, a matching at the reader stage is also necessary or not? Well, it depends. For example, the transition table in CMFGEN OSC files has an `i-j` field that corresponds to the indexes of the levels table, so matching is not required, is just there.\n",
"\n",
"On the other hand, for cross-sections initial matching is done in line 640 of `carsus/io/cmfgen/base.py` based on labels. Seems that COL files requires a similar matching.\n",
"\n",
"---"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "90d1b028",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "27029cea",
"metadata": {},
"outputs": [],
"source": [
"store = pd.HDFStore(\"/home/epassaro/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "c7c23dff",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>line_id</th>\n",
" <th>wavelength</th>\n",
" <th>f_ul</th>\n",
" <th>f_lu</th>\n",
" <th>nu</th>\n",
" <th>B_lu</th>\n",
" <th>B_ul</th>\n",
" <th>A_ul</th>\n",
" </tr>\n",
" <tr>\n",
" <th>atomic_number</th>\n",
" <th>ion_number</th>\n",
" <th>level_number_lower</th>\n",
" <th>level_number_upper</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">3</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>21</th>\n",
" <th>67</th>\n",
" <td>1823</td>\n",
" <td>16404.775425</td>\n",
" <td>0.000503</td>\n",
" <td>0.000252</td>\n",
" <td>1.827471e+14</td>\n",
" <td>6.933393e+07</td>\n",
" <td>1.386679e+08</td>\n",
" <td>1.247877e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <th>67</th>\n",
" <td>1923</td>\n",
" <td>27591.968635</td>\n",
" <td>0.001349</td>\n",
" <td>0.000674</td>\n",
" <td>1.086521e+14</td>\n",
" <td>3.124340e+08</td>\n",
" <td>6.248679e+08</td>\n",
" <td>1.181808e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <th>67</th>\n",
" <td>2001</td>\n",
" <td>43823.900517</td>\n",
" <td>0.002767</td>\n",
" <td>0.001383</td>\n",
" <td>6.840844e+13</td>\n",
" <td>1.017857e+09</td>\n",
" <td>2.035713e+09</td>\n",
" <td>9.609265e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <th>67</th>\n",
" <td>2052</td>\n",
" <td>67909.408678</td>\n",
" <td>0.006208</td>\n",
" <td>0.003104</td>\n",
" <td>4.414594e+13</td>\n",
" <td>3.539203e+09</td>\n",
" <td>7.078406e+09</td>\n",
" <td>8.979504e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <th>67</th>\n",
" <td>2107</td>\n",
" <td>105557.600728</td>\n",
" <td>0.011721</td>\n",
" <td>0.005861</td>\n",
" <td>2.840084e+13</td>\n",
" <td>1.038640e+10</td>\n",
" <td>2.077280e+10</td>\n",
" <td>7.016705e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">2</th>\n",
" <th rowspan=\"5\" valign=\"top\">1</th>\n",
" <th>11</th>\n",
" <th>21</th>\n",
" <td>533410</td>\n",
" <td>10126.280000</td>\n",
" <td>0.593500</td>\n",
" <td>0.890250</td>\n",
" <td>2.960539e+14</td>\n",
" <td>1.513552e+11</td>\n",
" <td>1.009035e+11</td>\n",
" <td>3.860674e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">13</th>\n",
" <th>21</th>\n",
" <td>533412</td>\n",
" <td>10126.505000</td>\n",
" <td>0.042400</td>\n",
" <td>0.042400</td>\n",
" <td>2.960473e+14</td>\n",
" <td>7.208767e+09</td>\n",
" <td>7.208767e+09</td>\n",
" <td>2.757966e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>533413</td>\n",
" <td>10126.440000</td>\n",
" <td>0.636000</td>\n",
" <td>0.848000</td>\n",
" <td>2.960492e+14</td>\n",
" <td>1.441744e+11</td>\n",
" <td>1.081308e+11</td>\n",
" <td>4.137002e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <th>23</th>\n",
" <td>533414</td>\n",
" <td>10126.440000</td>\n",
" <td>1.009500</td>\n",
" <td>1.346000</td>\n",
" <td>2.960492e+14</td>\n",
" <td>2.288429e+11</td>\n",
" <td>1.716322e+11</td>\n",
" <td>6.566515e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <th>24</th>\n",
" <td>533415</td>\n",
" <td>10126.537000</td>\n",
" <td>1.047000</td>\n",
" <td>1.308750</td>\n",
" <td>2.960464e+14</td>\n",
" <td>2.225119e+11</td>\n",
" <td>1.780095e+11</td>\n",
" <td>6.810312e+07</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>271741 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" line_id \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 1823 \n",
" 28 67 1923 \n",
" 37 67 2001 \n",
" 44 67 2052 \n",
" 51 67 2107 \n",
"... ... \n",
"2 1 11 21 533410 \n",
" 13 21 533412 \n",
" 22 533413 \n",
" 14 23 533414 \n",
" 15 24 533415 \n",
"\n",
" wavelength \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 16404.775425 \n",
" 28 67 27591.968635 \n",
" 37 67 43823.900517 \n",
" 44 67 67909.408678 \n",
" 51 67 105557.600728 \n",
"... ... \n",
"2 1 11 21 10126.280000 \n",
" 13 21 10126.505000 \n",
" 22 10126.440000 \n",
" 14 23 10126.440000 \n",
" 15 24 10126.537000 \n",
"\n",
" f_ul \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 0.000503 \n",
" 28 67 0.001349 \n",
" 37 67 0.002767 \n",
" 44 67 0.006208 \n",
" 51 67 0.011721 \n",
"... ... \n",
"2 1 11 21 0.593500 \n",
" 13 21 0.042400 \n",
" 22 0.636000 \n",
" 14 23 1.009500 \n",
" 15 24 1.047000 \n",
"\n",
" f_lu \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 0.000252 \n",
" 28 67 0.000674 \n",
" 37 67 0.001383 \n",
" 44 67 0.003104 \n",
" 51 67 0.005861 \n",
"... ... \n",
"2 1 11 21 0.890250 \n",
" 13 21 0.042400 \n",
" 22 0.848000 \n",
" 14 23 1.346000 \n",
" 15 24 1.308750 \n",
"\n",
" nu \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 1.827471e+14 \n",
" 28 67 1.086521e+14 \n",
" 37 67 6.840844e+13 \n",
" 44 67 4.414594e+13 \n",
" 51 67 2.840084e+13 \n",
"... ... \n",
"2 1 11 21 2.960539e+14 \n",
" 13 21 2.960473e+14 \n",
" 22 2.960492e+14 \n",
" 14 23 2.960492e+14 \n",
" 15 24 2.960464e+14 \n",
"\n",
" B_lu \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 6.933393e+07 \n",
" 28 67 3.124340e+08 \n",
" 37 67 1.017857e+09 \n",
" 44 67 3.539203e+09 \n",
" 51 67 1.038640e+10 \n",
"... ... \n",
"2 1 11 21 1.513552e+11 \n",
" 13 21 7.208767e+09 \n",
" 22 1.441744e+11 \n",
" 14 23 2.288429e+11 \n",
" 15 24 2.225119e+11 \n",
"\n",
" B_ul \\\n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 1.386679e+08 \n",
" 28 67 6.248679e+08 \n",
" 37 67 2.035713e+09 \n",
" 44 67 7.078406e+09 \n",
" 51 67 2.077280e+10 \n",
"... ... \n",
"2 1 11 21 1.009035e+11 \n",
" 13 21 7.208767e+09 \n",
" 22 1.081308e+11 \n",
" 14 23 1.716322e+11 \n",
" 15 24 1.780095e+11 \n",
"\n",
" A_ul \n",
"atomic_number ion_number level_number_lower level_number_upper \n",
"3 0 21 67 1.247877e+04 \n",
" 28 67 1.181808e+04 \n",
" 37 67 9.609265e+03 \n",
" 44 67 8.979504e+03 \n",
" 51 67 7.016705e+03 \n",
"... ... \n",
"2 1 11 21 3.860674e+07 \n",
" 13 21 2.757966e+06 \n",
" 22 4.137002e+07 \n",
" 14 23 6.566515e+07 \n",
" 15 24 6.810312e+07 \n",
"\n",
"[271741 rows x 8 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"store[\"lines\"]"
]
},
{
"cell_type": "markdown",
"id": "88950e79",
"metadata": {},
"source": [
"**Do not confuse `level_number_lower` and `level_number_upper` with the `level_index_lower` and\t`level_index_upper` from the readers `lines` attribute**."
]
},
{
"cell_type": "markdown",
"id": "05ac2a24",
"metadata": {},
"source": [
"Remember that the `level_index` is unique for each **ion and source** (0 to N). But the `level_number_lower` and `level_number_upper` is calculated differently at the `output` module. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment