Usage

The Documentation of the functions provides in detail in the API Documentation (atomneb.github.io/AtomNeb-py/doc). There are two main categories: collisionally excited lines (CEL) and recombination lines (RC).

Collisional Excitation Unit

The atomic data for collisional excitation unit (CEL) contain Energy Levels (Ej), Collision Strengths (Ωij), and Transition Probabilities (Aij). We have four atomic datasets for them: collection, chianti52, chianti60, and chianti70.

You need to load the atomneb library as follows:

import atomneb

Also:

import atomneb

Also:

import numpy as np
import os

atom_elj_file = os.path.join(base_dir,data_dir, 'AtomElj.fits')
atom_omij_file = os.path.join(base_dir,data_dir, 'AtomOmij.fits')
atom_aij_file = os.path.join(base_dir,data_dir, 'AtomAij.fits')
elj_data_list = atomneb.read_elj_list(atom_elj_file)
omij_data_list = atomneb.read_omij_list(atom_omij_file)
aij_data_list = atomneb.read_aij_list(atom_aij_file)

Now you have access to:

  • Energy Levels (Ej):

    atom='o'
    ion='iii'
    oiii_elj_data = atomneb.read_elj(atom_elj_file, atom, ion, level_num=6)
    print(oiii_elj_data['j_v'])
    print(oiii_elj_data['ej'])
    

    which gives:

    0.00000      1.00000      2.00000      2.00000      0.00000      2.00000
    0.00000      113.200      306.200      20273.30     43185.69     60324.80
    
  • Collision Strengths (Ωij):

    atom='o'
    ion='iii'
    oiii_omij_data = atomneb.read_omij(atom_omij_file, atom, ion)
    print(oiii_omij_data['level1'])
    print(oiii_omij_data['level2'])
    print(oiii_omij_data['strength'][0])
    

    which gives:

    0       1       1       1       1       ...
    0       2       3       4       5       ...
    100.0      158.50       251.20       398.10       631.0       ...
    
  • Transition Probabilities (Aij):

    atom='o'
    ion='iii'
    oiii_aij_data = atomneb.read_aij(atom_aij_file, atom, ion)
    print(oiii_aij_data['aij'][0])
    

    which gives:

    0.0000   2.5969e-05       0.0000   2.3220e-06      ...
    

Recombination Unit

The atomic data for recombination unit (RC) contain effective recombination coefficients (αeff) of emission lines from different collections: RC Collection, SH95 Collection, PPB91 Collection, PFSD12 He I data, FSL13 N II data, and SSB17 O II data.

You need to load the atomneb libary:

import atomneb

Also:

import numpy as np
import os

Now you have access to effective recombination coefficients (αeff) of the following collections:

  • RC Collection:

    atom_rc_file = os.path.join(base_dir,data_dir, 'rc_collection.fits')
    atom='c'
    ion='iii'
    cii_rc_data = atomneb.read_aeff_collection(atom_rc_file, atom, ion)
    n_line = len(cii_rc_data['wavelength'])
    for i in range(0, n_line):
         print(cii_rc_data['wavelength'][i], cii_rc_data['a'][i],
               cii_rc_data['b'][i], cii_rc_data['c'][i],
               cii_rc_data['d'][i], cii_rc_data['f'][i])
    

    which gives:

    914.00000      0.69280000     0.021400000    -0.016300000     -0.24310000     -0.88000000
    962.00000       1.0998000   -0.0042000000    -0.027900000     -0.22940000     -0.96560000
    997.00000      0.78210000     -0.36840000   0.00030000000     -0.12170000     -0.78740000
    ...
    
  • SH95 Collection:

    atom_rc_file = os.path.join(base_dir,data_dir, 'rc_SH95.fits')
    atom='h'
    ion='ii'
    hi_rc_data = atomneb.read_aeff_sh95(atom_rc_file, atom, ion)
    print(hi_rc_data['aeff'][0])
    

    which gives:

    100.00000       500.00000       0.0000000   4.2140000e-27   1.7560000e-27   1.0350000e-27
    ...
    
  • PPB91 Collection:

    atom_rc_file = os.path.join(base_dir,data_dir, 'rc_PPB91.fits')
    atom='c'
    ion='iii'
    cii_rc_data = atomneb.read_aeff_ppb91(atom_rc_file, atom, ion)
    n_line = len(cii_rc_data['wavelength'])
    for i in range(0, n_line):
       print(cii_rc_data['ion'][i], cii_rc_data['case1'][i], cii_rc_data['wavelength'][i],
             cii_rc_data['a'][i], cii_rc_data['b'][i], cii_rc_data['c'][i],
             cii_rc_data['d'][i], cii_rc_data['br'][i], cii_rc_data['q'][i], cii_rc_data['y'][i])
    

    which gives:

    C2+A       9903.4600      0.69700000     -0.78400000       4.2050000      0.72000000       1.0000000       1.6210000
    C2+A       4267.1500       1.0110000     -0.75400000       2.5870000      0.71900000      0.95000000       2.7950000
    ...
    
  • PFSD12 He I data:

    atom_rc_file = os.path.join(base_dir,data_dir, 'rc_he_ii_PFSD12.fits')
    atom='he'
    ion='ii'
    hei_rc_data = atomneb.read_aeff_he_i_pfsd12(atom_rc_file, atom, ion)
    hei_rc_data_wave = atomneb.read_aeff_he_i_pfsd12(atom_rc_file, atom, ion, wavelength=True)
    print(hei_rc_data['aeff'][0])
    

    which gives:

    5000.0000       10.000000      -25.379540      -25.058970      -25.948440      -24.651820      -25.637660
    ...
    
  • FSL13 N II data:

    atom_rc_file = os.path.join(base_dir,data_dir, 'rc_n_iii_FSL13.fits')
    atom='n'
    ion='iii'
    wavelength_range=[4400.0, 7100.0]
    nii_rc_data = atomneb.read_aeff_n_ii_fsl13(atom_rc_file, atom, ion, wavelength_range)
    nii_rc_data_wave = atomneb.read_aeff_n_ii_fsl13(atom_rc_file, atom, ion, wavelength_range, wavelength=True)
    print(nii_rc_data.aeff[0])
    n_line = len(hei_rc_data_wave['wavelength'])
    for i in range(0, n_line):
       print(nii_rc_data_wave['wavelength'][i], nii_rc_data_wave['tr'][i], nii_rc_data_wave['trans'][i])
    

    which gives:

    255.000      79.5000      47.3000      12.5000      6.20000      4.00000      2.86000
    258.000      54.4000      29.7000      7.92000      4.11000      2.72000      2.00000
    310.000      48.1000      23.7000      5.19000      2.55000      1.65000      1.21000
    434.000      50.3000      23.2000      4.71000      2.26000      1.45000      1.05000
    
    6413.23 6g - 4f2p6g G[9/2]o4 - 2p4f F[7/2]e3
    6556.32 6g - 4f2p6g G[9/2]o5 - 2p4f G[7/2]e4
    6456.97 6g - 4f2p6g G[9/2]o5 - 2p4f F[7/2]e4
    6446.53 6g - 4f2p6g F[7/2]o3 - 2p4f D[5/2]e2
    6445.34 6g - 4f2p6g F[7/2]o4 - 2p4f D[5/2]e3
    ...
    
  • SSB17 O II data: You first need to unpack rc_o_iii_SSB17_orl_case_b.fits.tar.gz, e.g.:

    tar -xvf rc_o_iii_SSB17_orl_case_b.fits.tar.gz
    

    If you need to have access to the full dataset (entire wavelengths, case A and B):

    tar -xvf rc_o_iii_SSB17.fits.tar.gz
    

    Please note that using the entire atomic data will make your program very slow and you may need to have a higher memory on your system. Without the above comment, as default, the cose uses rc_o_iii_SSB17_orl_case_b.fits:

    aatom_rc_file = os.path.join(base_dir,data_dir, 'rc_o_iii_SSB17_orl_case_b.fits')
    atom='o'
    ion='iii'
    case1='B'
    wavelength_range=[5320.0, 5330.0]
    oii_rc_data = atomneb.read_aeff_o_ii_ssb17(atom_rc_file, atom, ion, case1, wavelength_range)
    oii_rc_data_wave = atomneb.read_aeff_o_ii_ssb17(atom_rc_file, atom, ion, case1, wavelength_range, wavelength=True)
    print(oii_rc_data['aeff'][0])
    n_line = len(oii_rc_data_wave['wavelength'])
    for i in range(0, n_line):
       print(oii_rc_data_wave['wavelength'][i], oii_rc_data_wave['lower_term'][i], oii_rc_data_wave['upper_term'][i])
    

    which gives:

    1.64100e-30  1.60000e-30  1.56400e-30  1.54100e-30  1.52100e-30  1.50900e-30
    ...
    
    5327.17 2s22p2(1S)3p 2Po
    5325.42 2s22p2(1S)3p 2Po
    5327.18 2s22p2(1D)3d 2Ge
    5326.84 2s22p2(1D)3d 2Ge
    ...