def ingest_lines(self):
print("Ingesting lines from {}".format(self.data_source.short_name))
for rdr in self.ion_readers:
atomic_number = rdr.ion.Z
ion_charge = rdr.ion.Ion - 1
ion = Ion.as_unique(self.session, atomic_number=atomic_number, ion_charge=ion_charge)
try:
bound_lines = rdr.bound_lines
except ChiantiIonReaderError:
print("Lines not found for ion {} {}".format(convert_atomic_number2symbol(atomic_number), ion_charge))
continue
print("Ingesting lines for {} {}".format(convert_atomic_number2symbol(atomic_number), ion_charge))
lvl_index2id = self.get_lvl_index2id(ion)
for index, row in bound_lines.iterrows():
# index: (lower_level_index, upper_level_index)
lower_level_index, upper_level_index = index
try:
lower_level_id = int(lvl_index2id.loc[lower_level_index])
upper_level_id = int(lvl_index2id.loc[upper_level_index])
except KeyError:
raise IngesterError("Levels from this source have not been found."
"You must ingest levels before transitions")
# Create a new line
line = Line(
lower_level_id=lower_level_id,
upper_level_id=upper_level_id,
data_source=self.data_source,
wavelengths=[
LineWavelength(quantity=row["wavelength"]*u.AA,
data_source=self.data_source,
medium=MEDIUM_VACUUM,
method=row["method"])
],
a_values=[
LineAValue(quantity=row["a_value"]*u.Unit("s**-1"),
data_source=self.data_source)
],
gf_values=[
LineGFValue(quantity=row["gf_value"],
data_source=self.data_source)
]
)
self.session.add(line)
评论列表
文章目录