Skip to content

Commit

Permalink
Merge 6013ec8 into ba0cb2d
Browse files Browse the repository at this point in the history
  • Loading branch information
mklauser committed Mar 26, 2014
2 parents ba0cb2d + 6013ec8 commit d03e949
Showing 1 changed file with 27 additions and 24 deletions.
51 changes: 27 additions & 24 deletions tardis/atomic.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,8 @@ def read_collision_data(fname):
def read_ion_cx_data(fname):
try:
h5_file = h5py.File(fname, 'r')
ion_cx_th_data = h5_file['ionization_cx_threshold']
ion_cx_sp_data = h5_file['ionization_cx_support']
ion_cx_th_data = h5_file['ion_cx_data']
ion_cx_sp_data = h5_file['ion_cx_sp_data']
return ion_cx_th_data, ion_cx_sp_data
except IOError, err:
print(err.errno)
Expand Down Expand Up @@ -274,10 +274,10 @@ class AtomData(object):
::important to note here is that ion describes the final ion state
e.g. H I - H II is described with ion=2
levels_data : ~astropy.table.Table
levels : ~astropy.table.Table
containing the levels data: z, ion, level_number, energy, g
lines_data : ~astropy.table.Table
lines : ~astropy.table.Table
containing the lines data: wavelength, z, ion, levels_number_lower,
levels_number_upper, f_lu, f_ul
Expand Down Expand Up @@ -340,7 +340,7 @@ def from_hdf5(cls, fname=None):
synpp_refs = None

if 'ion_cx_data' in h5_datasets and 'ion_cx_data' in h5_datasets:
ion_cx_data = read_ion_cx_data(fname)
ion_cx_data = None
else:
ion_cx_data = None

Expand Down Expand Up @@ -417,18 +417,18 @@ def __init__(self, atom_data, ionization_data, levels_data, lines_data, macro_at
self.ionization_data.ionization_energy = units.Unit('eV').to('erg',
self.ionization_data.ionization_energy.values)

self.levels_data = DataFrame(levels_data.__array__())
self.levels_data.energy = units.Unit('eV').to('erg', self.levels_data.energy.values)
self._levels = DataFrame(levels_data.__array__())
self._levels.energy = units.Unit('eV').to('erg', self._levels.energy.values)

self.lines_data = DataFrame(lines_data.__array__())
self.lines_data.set_index('line_id', inplace=True)
self.lines_data['nu'] = units.Unit('angstrom').to('Hz', self.lines_data['wavelength'], units.spectral())
self.lines_data['wavelength_cm'] = units.Unit('angstrom').to('cm', self.lines_data['wavelength'])
self._lines = DataFrame(lines_data.__array__())
self._lines.set_index('line_id', inplace=True)
self._lines['nu'] = units.Unit('angstrom').to('Hz', self._lines['wavelength'], units.spectral())
self._lines['wavelength_cm'] = units.Unit('angstrom').to('cm', self._lines['wavelength'])




#tmp_lines_index = pd.MultiIndex.from_arrays(self.lines_data)
#tmp_lines_index = pd.MultiIndex.from_arrays(self.lines)
#self.lines_inde

self.symbol2atomic_number = OrderedDict(zip(self.atom_data['symbol'].values, self.atom_data.index))
Expand All @@ -445,7 +445,7 @@ def prepare_atom_data(self, selected_atomic_numbers, line_interaction_type='scat
nlte_species=[]):
"""
Prepares the atom data to set the lines, levels and if requested macro atom data.
This function mainly cuts the `levels_data` and `lines_data` by discarding any data that is not needed (any data
This function mainly cuts the `levels` and `lines` by discarding any data that is not needed (any data
for atoms that are not needed
Parameters
Expand All @@ -466,23 +466,26 @@ def prepare_atom_data(self, selected_atomic_numbers, line_interaction_type='scat

self.nlte_species = nlte_species

self.levels = self.levels_data[self.levels_data['atomic_number'].isin(self.selected_atomic_numbers)]
self._levels = self._levels[self._levels['atomic_number'].isin(self.selected_atomic_numbers)]
if max_ion_number is not None:
self.levels = self.levels[self.levels['ion_number'] <= max_ion_number]
self.levels = self.levels.set_index(['atomic_number', 'ion_number', 'level_number'])
self._levels = self._levels[self._levels['ion_number'] <= max_ion_number]
self._levels = self._levels.set_index(['atomic_number', 'ion_number', 'level_number'])
self.levels = self._levels.copy()

self.levels_index = pd.Series(np.arange(len(self.levels), dtype=int), index=self.levels.index)
self.levels_index = pd.Series(np.arange(len(self._levels), dtype=int), index=self._levels.index)
#cutting levels_lines
self.lines = self.lines_data[self.lines_data['atomic_number'].isin(self.selected_atomic_numbers)]
self._lines = self._lines[self._lines['atomic_number'].isin(self.selected_atomic_numbers)]
if max_ion_number is not None:
self.lines = self.lines[self.lines['ion_number'] <= max_ion_number]
self._lines = self._lines[self._lines['ion_number'] <= max_ion_number]

self.lines.sort('wavelength', inplace=True)
self._lines.sort('wavelength', inplace=True)

self.lines_index = pd.Series(np.arange(len(self.lines), dtype=int), index=self.lines.index)
self.lines = self._lines.copy()

self.lines_index = pd.Series(np.arange(len(self._lines), dtype=int), index=self._lines.index)

tmp_lines_lower2level_idx = pd.MultiIndex.from_arrays([self.lines['atomic_number'], self.lines['ion_number'],
self.lines['level_number_lower']])
tmp_lines_lower2level_idx = pd.MultiIndex.from_arrays([self._lines['atomic_number'], self._lines['ion_number'],
self._lines['level_number_lower']])

self.lines_lower2level_idx = self.levels_index.ix[tmp_lines_lower2level_idx].values.astype(np.int64)

Expand Down Expand Up @@ -550,7 +553,7 @@ def prepare_atom_data(self, selected_atomic_numbers, line_interaction_type='scat

def __repr__(self):
return "<Atomic Data UUID=%s MD5=%s Lines=%d Levels=%d>" % \
(self.uuid1, self.md5, self.lines_data.atomic_number.count(), self.levels_data.energy.count())
(self.uuid1, self.md5, self.lines.atomic_number.count(), self.levels.energy.count())


class NLTEData(object):
Expand Down

0 comments on commit d03e949

Please sign in to comment.