Creating the tardis_example database

This notebook provides a quick introduction in how to use Carsus.

Prerequisites:

  • Install carsus (preferably as a git repository)

  • Install ChiantiPy (from source or pip, both versions work)

  • Install chiantipy and set the environmentvariable XUVTOP = /path/to/chianti/root

  • We highly recommend installing the carsus-db repository as it includes the files of several sources that cannot easily be downloaded.

Imports and initialization:

Import all the essential ingesters and initialize the session.

[1]:
import os
from carsus import init_db
from carsus.io.nist import (
        NISTWeightsCompIngester,
        NISTIonizationEnergiesIngester
        )
from carsus.io.kurucz import GFALLIngester
from carsus.io.chianti_ import ChiantiIngester
from carsus.io.zeta import KnoxLongZetaIngester
from carsus.io.output import AtomData


DB_ROOT = '/media/data/projects/tardis/carsus-db/'
session = init_db('sqlite:////tmp/carsus_example.db')
#session = init_db('sqlite:///' + os.path.join(DB_ROOT, 'carsus_example.db'))
storename = os.path.join(DB_ROOT, 'kurucz_chianti_H_He.h5')
storename = '/tmp/carsus_example.h5'
zeta_fname = os.path.join(DB_ROOT, 'zeta/knox_long_recombination_zeta.dat')
gfall_fname = os.path.join(DB_ROOT, 'gfall/gfall_old.dat')
 found PyQt4 widgets
 using PyQt4 widgets
Initializing the database at sqlite:////tmp/carsus_example.db
Ingesting basic atomic data

Ingesting data

Weights

[2]:
weightscomp_ingester = NISTWeightsCompIngester(session)
weightscomp_ingester.ingest()
session.commit()
Downloading data from the NIST Atomic Weights and Isotopic Compositions database.
Ingesting atomic weights from nist

Now we have all the weights ingested.

Ionization Energies

[3]:
ioniz_energies_ingester = NISTIonizationEnergiesIngester(
            session,
            spectra="h-zn"
            )
ioniz_energies_ingester.ingest(
            ionization_energies=True,
            ground_levels=True
            )
session.commit()

Downloading ionization energies from the NIST Atomic Spectra Database
/media/data/projects/tardis/carsus/carsus/io/nist/ionization.py:88: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.
  usecols=range(5), names=column_names, skiprows=3, skipfooter=1)
Ingesting ionization energies from nist-asd
Ingesting ground levels from nist-asd

Ingesting kurucz levels and lines

[4]:
gfall_ingester = GFALLIngester(session, gfall_fname, ions='H-Zn')
gfall_ingester.ingest(levels=True, lines=True)
session.commit()
Ingesting levels from ku_latest
Ingesting levels for He 0
Ingesting levels for He 1
Ingesting levels for Li 0
Ingesting levels for Li 1
Ingesting levels for Be 0
Ingesting levels for Be 1
Ingesting levels for Be 2
Ingesting levels for B 0
Ingesting levels for B 1
Ingesting levels for B 2
Ingesting levels for B 3
Ingesting levels for C 0
Ingesting levels for C 1
Ingesting levels for C 2
Ingesting levels for C 3
Ingesting levels for N 0
Ingesting levels for N 1
Ingesting levels for N 2
Ingesting levels for N 3
Ingesting levels for N 4
Ingesting levels for N 5
Ingesting levels for O 0
Ingesting levels for O 1
Ingesting levels for O 2
Ingesting levels for O 3
Ingesting levels for O 4
Ingesting levels for O 5
Ingesting levels for F 0
Ingesting levels for F 1
Ingesting levels for F 2
Ingesting levels for F 3
Ingesting levels for F 4
Ingesting levels for F 5
Ingesting levels for Ne 0
Ingesting levels for Ne 1
Ingesting levels for Ne 2
Ingesting levels for Ne 3
Ingesting levels for Ne 4
Ingesting levels for Ne 5
Ingesting levels for Na 0
Ingesting levels for Na 1
Ingesting levels for Na 2
Ingesting levels for Na 3
Ingesting levels for Na 4
Ingesting levels for Na 5
Ingesting levels for Mg 0
Ingesting levels for Mg 1
Ingesting levels for Mg 2
Ingesting levels for Mg 3
Ingesting levels for Mg 4
Ingesting levels for Mg 5
Ingesting levels for Al 0
Ingesting levels for Al 1
Ingesting levels for Al 2
Ingesting levels for Al 3
Ingesting levels for Al 4
Ingesting levels for Al 5
Ingesting levels for Si 0
Ingesting levels for Si 1
Ingesting levels for Si 2
Ingesting levels for Si 3
Ingesting levels for Si 4
Ingesting levels for Si 5
Ingesting levels for P 0
Ingesting levels for P 1
Ingesting levels for P 2
Ingesting levels for P 3
Ingesting levels for P 4
Ingesting levels for P 5
Ingesting levels for S 0
Ingesting levels for S 1
Ingesting levels for S 2
Ingesting levels for S 3
Ingesting levels for S 4
Ingesting levels for S 5
Ingesting levels for Cl 0
Ingesting levels for Cl 1
Ingesting levels for Cl 2
Ingesting levels for Cl 3
Ingesting levels for Cl 4
Ingesting levels for Ar 0
Ingesting levels for Ar 1
Ingesting levels for Ar 2
Ingesting levels for Ar 3
Ingesting levels for Ar 4
Ingesting levels for K 0
Ingesting levels for K 1
Ingesting levels for K 2
Ingesting levels for K 3
Ingesting levels for K 4
Ingesting levels for Ca 0
Ingesting levels for Ca 1
Ingesting levels for Ca 2
Ingesting levels for Ca 3
Ingesting levels for Ca 4
Ingesting levels for Ca 5
Ingesting levels for Ca 6
Ingesting levels for Ca 7
Ingesting levels for Ca 8
Ingesting levels for Sc 0
Ingesting levels for Sc 1
Ingesting levels for Sc 2
Ingesting levels for Sc 3
Ingesting levels for Sc 4
Ingesting levels for Sc 5
Ingesting levels for Sc 6
Ingesting levels for Sc 7
Ingesting levels for Sc 8
Ingesting levels for Ti 0
Ingesting levels for Ti 1
Ingesting levels for Ti 2
Ingesting levels for Ti 3
Ingesting levels for Ti 4
Ingesting levels for Ti 5
Ingesting levels for Ti 6
Ingesting levels for Ti 7
Ingesting levels for Ti 8
Ingesting levels for V 0
Ingesting levels for V 1
Ingesting levels for V 2
Ingesting levels for V 3
Ingesting levels for V 4
Ingesting levels for V 5
Ingesting levels for V 6
Ingesting levels for V 7
Ingesting levels for V 8
Ingesting levels for Cr 0
Ingesting levels for Cr 1
Ingesting levels for Cr 2
Ingesting levels for Cr 3
Ingesting levels for Cr 4
Ingesting levels for Cr 5
Ingesting levels for Cr 6
Ingesting levels for Cr 7
Ingesting levels for Cr 8
Ingesting levels for Mn 0
Ingesting levels for Mn 1
Ingesting levels for Mn 2
Ingesting levels for Mn 3
Ingesting levels for Mn 4
Ingesting levels for Mn 5
Ingesting levels for Mn 6
Ingesting levels for Mn 7
Ingesting levels for Mn 8
Ingesting levels for Fe 0
Ingesting levels for Fe 1
Ingesting levels for Fe 2
Ingesting levels for Fe 3
Ingesting levels for Fe 4
Ingesting levels for Fe 5
Ingesting levels for Fe 6
Ingesting levels for Fe 7
Ingesting levels for Fe 8
Ingesting levels for Co 0
Ingesting levels for Co 1
Ingesting levels for Co 2
Ingesting levels for Co 3
Ingesting levels for Co 4
Ingesting levels for Co 5
Ingesting levels for Co 6
Ingesting levels for Co 7
Ingesting levels for Co 8
Ingesting levels for Ni 0
Ingesting levels for Ni 1
Ingesting levels for Ni 2
Ingesting levels for Ni 3
Ingesting levels for Ni 4
Ingesting levels for Ni 5
Ingesting levels for Ni 6
Ingesting levels for Ni 7
Ingesting levels for Ni 8
Ingesting levels for Cu 0
Ingesting levels for Cu 1
Ingesting levels for Zn 0
Ingesting levels for Zn 1
Ingesting levels for Zn 2
Ingesting lines from ku_latest
Ingesting lines for He 0
Ingesting lines for He 1
Ingesting lines for Li 0
Ingesting lines for Li 1
Ingesting lines for Be 0
Ingesting lines for Be 1
Ingesting lines for Be 2
Ingesting lines for B 0
Ingesting lines for B 1
Ingesting lines for B 2
Ingesting lines for B 3
Ingesting lines for C 0
Ingesting lines for C 1
Ingesting lines for C 2
Ingesting lines for C 3
Ingesting lines for N 0
Ingesting lines for N 1
Ingesting lines for N 2
Ingesting lines for N 3
Ingesting lines for N 4
Ingesting lines for N 5
Ingesting lines for O 0
Ingesting lines for O 1
Ingesting lines for O 2
Ingesting lines for O 3
Ingesting lines for O 4
Ingesting lines for O 5
Ingesting lines for F 0
Ingesting lines for F 1
Ingesting lines for F 2
Ingesting lines for F 3
Ingesting lines for F 4
Ingesting lines for F 5
Ingesting lines for Ne 0
Ingesting lines for Ne 1
Ingesting lines for Ne 2
Ingesting lines for Ne 3
Ingesting lines for Ne 4
Ingesting lines for Ne 5
Ingesting lines for Na 0
Ingesting lines for Na 1
Ingesting lines for Na 2
Ingesting lines for Na 3
Ingesting lines for Na 4
Ingesting lines for Na 5
Ingesting lines for Mg 0
Ingesting lines for Mg 1
Ingesting lines for Mg 2
Ingesting lines for Mg 3
Ingesting lines for Mg 4
Ingesting lines for Mg 5
Ingesting lines for Al 0
Ingesting lines for Al 1
Ingesting lines for Al 2
Ingesting lines for Al 3
Ingesting lines for Al 4
Ingesting lines for Al 5
Ingesting lines for Si 0
Ingesting lines for Si 1
Ingesting lines for Si 2
Ingesting lines for Si 3
Ingesting lines for Si 4
Ingesting lines for Si 5
Ingesting lines for P 0
Ingesting lines for P 1
Ingesting lines for P 2
Ingesting lines for P 3
Ingesting lines for P 4
Ingesting lines for P 5
Ingesting lines for S 0
Ingesting lines for S 1
Ingesting lines for S 2
Ingesting lines for S 3
Ingesting lines for S 4
Ingesting lines for S 5
Ingesting lines for Cl 0
Ingesting lines for Cl 1
Ingesting lines for Cl 2
Ingesting lines for Cl 3
Ingesting lines for Cl 4
Ingesting lines for Ar 0
Ingesting lines for Ar 1
Ingesting lines for Ar 2
Ingesting lines for Ar 3
Ingesting lines for Ar 4
Ingesting lines for K 0
Ingesting lines for K 1
Ingesting lines for K 2
Ingesting lines for K 3
Ingesting lines for K 4
Ingesting lines for Ca 0
Ingesting lines for Ca 1
Ingesting lines for Ca 2
Ingesting lines for Ca 3
Ingesting lines for Ca 4
Ingesting lines for Ca 5
Ingesting lines for Ca 6
Ingesting lines for Ca 7
Ingesting lines for Ca 8
Ingesting lines for Sc 0
Ingesting lines for Sc 1
Ingesting lines for Sc 2
Ingesting lines for Sc 3
Ingesting lines for Sc 4
Ingesting lines for Sc 5
Ingesting lines for Sc 6
Ingesting lines for Sc 7
Ingesting lines for Sc 8
Ingesting lines for Ti 0
Ingesting lines for Ti 1
Ingesting lines for Ti 2
Ingesting lines for Ti 3
Ingesting lines for Ti 4
Ingesting lines for Ti 5
Ingesting lines for Ti 6
Ingesting lines for Ti 7
Ingesting lines for Ti 8
Ingesting lines for V 0
Ingesting lines for V 1
Ingesting lines for V 2
Ingesting lines for V 3
Ingesting lines for V 4
Ingesting lines for V 5
Ingesting lines for V 6
Ingesting lines for V 7
Ingesting lines for V 8
Ingesting lines for Cr 0
Ingesting lines for Cr 1
Ingesting lines for Cr 2
Ingesting lines for Cr 3
Ingesting lines for Cr 4
Ingesting lines for Cr 5
Ingesting lines for Cr 6
Ingesting lines for Cr 7
Ingesting lines for Cr 8
Ingesting lines for Mn 0
Ingesting lines for Mn 1
Ingesting lines for Mn 2
Ingesting lines for Mn 3
Ingesting lines for Mn 4
Ingesting lines for Mn 5
Ingesting lines for Mn 6
Ingesting lines for Mn 7
Ingesting lines for Mn 8
Ingesting lines for Fe 0
Ingesting lines for Fe 1
Ingesting lines for Fe 2
Ingesting lines for Fe 3
Ingesting lines for Fe 4
Ingesting lines for Fe 5
Ingesting lines for Fe 6
Ingesting lines for Fe 7
Ingesting lines for Fe 8
Ingesting lines for Co 0
Ingesting lines for Co 1
Ingesting lines for Co 2
Ingesting lines for Co 3
Ingesting lines for Co 4
Ingesting lines for Co 5
Ingesting lines for Co 6
Ingesting lines for Co 7
Ingesting lines for Co 8
Ingesting lines for Ni 0
Ingesting lines for Ni 1
Ingesting lines for Ni 2
Ingesting lines for Ni 3
Ingesting lines for Ni 4
Ingesting lines for Ni 5
Ingesting lines for Ni 6
Ingesting lines for Ni 7
Ingesting lines for Ni 8
Ingesting lines for Cu 0
Ingesting lines for Cu 1
Ingesting lines for Zn 0
Ingesting lines for Zn 1
Ingesting lines for Zn 2

Ingesting chianti levels and lines for H and He

[5]:
chianti_ingester = ChiantiIngester(session, ions='h-he')
chianti_ingester.ingest(levels=True, lines=True, collisions=False)
session.commit()
Ingesting levels from chianti_v8.0.6
Ingesting levels for H 0
Ingesting levels for He 0
Ingesting levels for He 1
Ingesting lines from chianti_v8.0.6
Ingesting lines for H 0
Ingesting lines for He 0
Ingesting lines for He 1

Ingesting Zeta data

[6]:
zeta_ingester = KnoxLongZetaIngester(session, zeta_fname)
zeta_ingester.ingest()
session.commit()

Create a tardis readable HDFStore

As we did in the Quickstart, we first create an AtomData instance. For this database we choose kurucz as the primary DataSource with only hydrogen and helium coming from chianti. We also specify chianti_short_name which contains the version of the chianti database that was ingested.

[7]:
ad = AtomData(
        session,
        selected_atoms='H-Zn',
        chianti_ions="H; He",
        chianti_short_name='chianti_v8.0.6'
        )


Writing the output

The database we want to create contains all data, except for the collision data.

[8]:
ad.to_hdf(
        storename,
        store_atom_masses=True,
        store_ionization_energies=True,
        store_levels=True,
        store_lines=True,
        store_macro_atom=True,
        store_collisions=False,
        store_zeta_data=True
        )
/media/data/projects/tardis/carsus/carsus/io/output/tardis_.py:562: RuntimeWarning: divide by zero encountered in log10
  lines['loggf'] = np.log10(lines['gf'])
Signing AtomData:
MD5: 3c7174aa939d1c9dac4e41afd7168796
UUID1: 4f8355067e6a11e78bcb507b9d2c8db1

Comparison to old kurucz: 7 lines missing

You are done! Now you can use the created HDFStore to run TARDIS simulations.