From 5264d184cab5dbbf0bfe052f4f685266cd48dbc7 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Thu, 20 Jun 2024 20:02:51 -0400 Subject: [PATCH 01/22] crappy version --- src/synthesize.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 58881035..523ee8ec 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -216,6 +216,7 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, source_fn = blackbody.((l->l.temp).(atm.layers), all_λs') cntm = nothing + cntm_alpha = copy(α) if return_cntm cntm, _ = if bezier_radiative_transfer RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) @@ -243,7 +244,10 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, flux, intensity = if bezier_radiative_transfer RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) else - RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, α, source_fn, α5, n_mu_points) + #display(all_λs) + i = findfirst(all_λs .≈ 5e-5) + println("alpha ref ind: ", i) + RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, α, source_fn, α[:, i], n_mu_points) end # collect the indices corresponding to each wavelength range From 77b4dbebaf0a7ef1eb2d325d71bdad6579b9ff23 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Thu, 20 Jun 2024 20:12:31 -0400 Subject: [PATCH 02/22] crappy working version --- src/synthesize.jl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/synthesize.jl b/src/synthesize.jl index 523ee8ec..b2af2cc7 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -259,6 +259,16 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, wl_lb_ind += length(λs) end + if return_cntm + cntm, _ = if bezier_radiative_transfer + RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) + else + i = findfirst(all_λs .≈ 5e-5) + println("alpha ref ind: ", i) + RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, cntm_alpha, source_fn, α[:, i], n_mu_points) + end + end + (flux=flux, cntm=cntm, intensity=intensity, alpha=α, number_densities=number_densities, electron_number_density=nₑs, wavelengths=all_λs.*1e8, subspectra=subspectra) end From 96107f4404e1f4981b2f63cc20c2f3d381ae9e1c Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 3 Jul 2024 16:37:52 -0400 Subject: [PATCH 03/22] working (?) not dumb implementation --- src/line_absorption.jl | 2 +- src/molecular_cross_sections.jl | 2 +- src/synthesize.jl | 32 ++++++++++++++------------------ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/line_absorption.jl b/src/line_absorption.jl index 8b96eba8..7d0eee0c 100644 --- a/src/line_absorption.jl +++ b/src/line_absorption.jl @@ -2,7 +2,7 @@ using SpecialFunctions: gamma using ProgressMeter: @showprogress """ - line_absorption(linelist, λs, temp, nₑ, n_densities, partition_fns, ξ + line_absorption!(α, linelist, λs, temp, nₑ, n_densities, partition_fns, ξ ; α_cntm=nothing, cutoff_threshold=1e-3, window_size=20.0*1e-8) Calculate the opacity coefficient, α, in units of cm^-1 from all lines in `linelist`, at wavelengths diff --git a/src/molecular_cross_sections.jl b/src/molecular_cross_sections.jl index 3b45a2b1..f5744c9e 100644 --- a/src/molecular_cross_sections.jl +++ b/src/molecular_cross_sections.jl @@ -76,7 +76,7 @@ end Interpolate the molecular cross-sections and add them to the total absorption coefficient `α`. See [`MolecularCrossSection`](@ref) for more information. """ -function interpolate_molecular_cross_sections!(α::Matrix{R}, molecular_cross_sections, Ts, vmic, +function interpolate_molecular_cross_sections!(α::AbstractArray{R}, molecular_cross_sections, Ts, vmic, number_densities) where R <: Real if length(molecular_cross_sections) == 0 return diff --git a/src/synthesize.jl b/src/synthesize.jl index adad5ee8..beac1f88 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -153,6 +153,9 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, sorted_cntmνs = c_cgs ./ reverse(cntmλs) # sort linelist and remove lines far from the synthesis region + # first just the ones needed for α5 + linelist5 = filter_linelist(linelist, 5e-5:5e-5, line_buffer) + # now the ones for the synthesis linelist = filter_linelist(linelist, wl_ranges, line_buffer) if length(A_X) != MAX_ATOMIC_NUMBER || (A_X[1] != 12) @@ -204,9 +207,16 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, #vector of continuum-absorption interpolators α_cntm = last.(triples) + # line contributions to α5 + if ! bezier_radiative_transfer + line_absorption!(view(α5, :, 1), linelist5, [5e-5:1:5e-5], get_temps(atm), nₑs, number_densities, + partition_funcs, vmic*1e5, α_cntm; cutoff_threshold=line_cutoff_threshold) + interpolate_molecular_cross_sections!(view(α5, :, 1), molecular_cross_sections, + get_temps(atm), vmic, number_densities) + end + source_fn = blackbody.((l->l.temp).(atm.layers), all_λs') cntm = nothing - cntm_alpha = copy(α) if return_cntm cntm, _ = if bezier_radiative_transfer RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) @@ -226,18 +236,14 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, end end - line_absorption!(α, linelist, wl_ranges, [layer.temp for layer in atm.layers], nₑs, - number_densities, partition_funcs, vmic*1e5, α_cntm, cutoff_threshold=line_cutoff_threshold; - verbose=verbose) + line_absorption!(α, linelist, wl_ranges, get_temps(atm), nₑs, number_densities, partition_funcs, + vmic*1e5, α_cntm; cutoff_threshold=line_cutoff_threshold, verbose=verbose) interpolate_molecular_cross_sections!(α, molecular_cross_sections, get_temps(atm), vmic, number_densities) flux, intensity = if bezier_radiative_transfer RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) else - #display(all_λs) - i = findfirst(all_λs .≈ 5e-5) - println("alpha ref ind: ", i) - RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, α, source_fn, α[:, i], n_mu_points) + RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, α, source_fn, α5, n_mu_points) end # collect the indices corresponding to each wavelength range @@ -249,16 +255,6 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, wl_lb_ind += length(λs) end - if return_cntm - cntm, _ = if bezier_radiative_transfer - RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) - else - i = findfirst(all_λs .≈ 5e-5) - println("alpha ref ind: ", i) - RadiativeTransfer.MoogStyleTransfer.radiative_transfer(atm, cntm_alpha, source_fn, α[:, i], n_mu_points) - end - end - (flux=flux, cntm=cntm, intensity=intensity, alpha=α, number_densities=number_densities, electron_number_density=nₑs, wavelengths=all_λs.*1e8, subspectra=subspectra) end From 538fe5f52ecaaf71c580071543632bbf88d8ff57 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 5 Jul 2024 16:58:21 -0400 Subject: [PATCH 04/22] allow mol sigma wavelengths to mismatch between tabulation and synthesis --- src/molecular_cross_sections.jl | 34 +++++++++++++++++--------------- src/synthesize.jl | 8 +++++--- test/molecular_cross_sections.jl | 2 +- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/molecular_cross_sections.jl b/src/molecular_cross_sections.jl index f5744c9e..07aea52a 100644 --- a/src/molecular_cross_sections.jl +++ b/src/molecular_cross_sections.jl @@ -1,9 +1,9 @@ -using Interpolations: GriddedInterpolation, interpolate!, Gridded, NoInterp, Linear +using Interpolations: interpolate!, Gridded, Linear, extrapolate using HDF5 struct MolecularCrossSection wls # just for debugging - itp :: GriddedInterpolation + itp species :: Korg.Species end @@ -63,9 +63,9 @@ function MolecularCrossSection(linelist, wls; cutoff_alpha=1e-32, end species = all_specs[1] - itp = interpolate!((vmic_vals, log_temp_vals, 1:size(α, 3)), - α .* cutoff_alpha, - (Gridded(Linear()), Gridded(Linear()), NoInterp())) + itp = extrapolate(interpolate!((vmic_vals, log_temp_vals, vcat(wls...)*1e-8), + α .* cutoff_alpha, + (Gridded(Linear()), Gridded(Linear()), Gridded(Linear()))), 0.0) MolecularCrossSection(wls, itp, species) end @@ -76,8 +76,8 @@ end Interpolate the molecular cross-sections and add them to the total absorption coefficient `α`. See [`MolecularCrossSection`](@ref) for more information. """ -function interpolate_molecular_cross_sections!(α::AbstractArray{R}, molecular_cross_sections, Ts, vmic, - number_densities) where R <: Real +function interpolate_molecular_cross_sections!(α::AbstractArray{R}, molecular_cross_sections, λs, + Ts, vmic, number_densities) where R <: Real if length(molecular_cross_sections) == 0 return end @@ -86,7 +86,7 @@ function interpolate_molecular_cross_sections!(α::AbstractArray{R}, molecular_c for i in 1:size(α, 1) # this is an inefficient order in which to write to α, but doing the interpolations this # way uses less memory. - view(α, i, :) .+= sigma.itp(vmic, log10(Ts[i]), 1:size(α, 2)) * number_densities[sigma.species][i] + view(α, i, :) .+= sigma.itp.(vmic, log10(Ts[i]), λs) * number_densities[sigma.species][i] end end ; @@ -105,9 +105,9 @@ function save_molecular_cross_section(filename, cross_section) HDF5.h5open(filename, "w") do file HDF5.write(file, "wls", [(l[begin], step(l), l[end]) for l in wls]) - HDF5.write(file, "vmic_vals", collect(itp.knots[1])) - HDF5.write(file, "T_vals", collect(itp.knots[2])) - HDF5.write(file, "vals", itp.coefs) + HDF5.write(file, "vmic_vals", collect(itp.itp.knots[1])) + HDF5.write(file, "T_vals", collect(itp.itp.knots[2])) + HDF5.write(file, "vals", itp.itp.coefs) HDF5.write(file, "species", string(species)) end end @@ -125,13 +125,15 @@ function read_molecular_cross_section(filename) start:step:stop end vmic_vals = HDF5.read(file, "vmic_vals") - T_vals = HDF5.read(file, "T_vals") - alpha_vals = HDF5.read(file, "vals") + logT_vals = HDF5.read(file, "T_vals") + # doesn't actually matter that it's mmaped because it's passed to interpolate! + alpha_vals = HDF5.readmmap(file["vals"]) species = Species(HDF5.read(file, "species")) - itp = interpolate!((vmic_vals, T_vals, 1:sum(length.(wls))), - alpha_vals, - (Gridded(Linear()), Gridded(Linear()), NoInterp())) + itp = extrapolate(interpolate!((vmic_vals, logT_vals, vcat(wls...)*1e8), + alpha_vals, + (Gridded(Linear()), Gridded(Linear()), Gridded(Linear()))), + 0.0) MolecularCrossSection(wls, itp, species) end diff --git a/src/synthesize.jl b/src/synthesize.jl index beac1f88..3ef9ed97 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -209,9 +209,11 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # line contributions to α5 if ! bezier_radiative_transfer + ac5 = copy(α5) + α_cntm_5(x) = ac5 line_absorption!(view(α5, :, 1), linelist5, [5e-5:1:5e-5], get_temps(atm), nₑs, number_densities, - partition_funcs, vmic*1e5, α_cntm; cutoff_threshold=line_cutoff_threshold) - interpolate_molecular_cross_sections!(view(α5, :, 1), molecular_cross_sections, + partition_funcs, vmic*1e5, α_cntm_5; cutoff_threshold=line_cutoff_threshold) + interpolate_molecular_cross_sections!(view(α5, :, 1), molecular_cross_sections, [5e-5], get_temps(atm), vmic, number_densities) end @@ -238,7 +240,7 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, line_absorption!(α, linelist, wl_ranges, get_temps(atm), nₑs, number_densities, partition_funcs, vmic*1e5, α_cntm; cutoff_threshold=line_cutoff_threshold, verbose=verbose) - interpolate_molecular_cross_sections!(α, molecular_cross_sections, get_temps(atm), vmic, number_densities) + interpolate_molecular_cross_sections!(α, molecular_cross_sections, all_λs, get_temps(atm), vmic, number_densities) flux, intensity = if bezier_radiative_transfer RadiativeTransfer.BezierTransfer.radiative_transfer(atm, α, source_fn, n_mu_points) diff --git a/test/molecular_cross_sections.jl b/test/molecular_cross_sections.jl index 7f6e6358..c699af97 100644 --- a/test/molecular_cross_sections.jl +++ b/test/molecular_cross_sections.jl @@ -27,7 +27,7 @@ filename = tempname() Korg.save_molecular_cross_section(filename, table) deserialized_table = Korg.read_molecular_cross_section(filename) - @test table.itp == deserialized_table.itp + @test table.itp.itp.coefs == deserialized_table.itp.itp.coefs @test all(table.wls .== deserialized_table.wls) @test table.species == deserialized_table.species end \ No newline at end of file From 0f8b0d0aebf4b70c00e17367d7d7ed19aa0b15b0 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Mon, 8 Jul 2024 15:03:02 -0400 Subject: [PATCH 05/22] fix cntm alpha in alpha_5 calculation and suppress empty linelist warning for the same --- src/synthesize.jl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 3ef9ed97..227aaf2a 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -154,7 +154,7 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # sort linelist and remove lines far from the synthesis region # first just the ones needed for α5 - linelist5 = filter_linelist(linelist, 5e-5:5e-5, line_buffer) + linelist5 = filter_linelist(linelist, 5e-5:5e-5, line_buffer; warn_empty=false) # now the ones for the synthesis linelist = filter_linelist(linelist, wl_ranges, line_buffer) @@ -209,8 +209,7 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # line contributions to α5 if ! bezier_radiative_transfer - ac5 = copy(α5) - α_cntm_5(x) = ac5 + α_cntm_5 = [_->a for a in copy(α5)] # lambda per layer line_absorption!(view(α5, :, 1), linelist5, [5e-5:1:5e-5], get_temps(atm), nₑs, number_densities, partition_funcs, vmic*1e5, α_cntm_5; cutoff_threshold=line_cutoff_threshold) interpolate_molecular_cross_sections!(view(α5, :, 1), molecular_cross_sections, [5e-5], @@ -278,7 +277,7 @@ construct_wavelength_ranges(wls::AbstractRange) = [wls] Return a new linelist containing only lines within the provided wavelength ranges. """ -function filter_linelist(linelist, wl_ranges, line_buffer) +function filter_linelist(linelist, wl_ranges, line_buffer; warn_empty=true) # this could be made faster by using a binary search (e.g. searchsortedfirst/last) #sort the lines if necessary @@ -297,7 +296,7 @@ function filter_linelist(linelist, wl_ranges, line_buffer) return false end - if nlines_before != 0 && length(linelist) == 0 + if nlines_before != 0 && length(linelist) == 0 && warn_empty @warn "The provided linelist was not empty, but none of the lines were within the provided wavelength range." end linelist From 3bf7861ae171dfac82647d35d0b87defacec4cb8 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Tue, 9 Jul 2024 16:38:41 -0400 Subject: [PATCH 06/22] don't create a fictitious line at 5000 angstroms because it makes the finite differences calculation unstable. --- test/autodiff.jl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/test/autodiff.jl b/test/autodiff.jl index be02999b..96e3628d 100644 --- a/test/autodiff.jl +++ b/test/autodiff.jl @@ -19,10 +19,13 @@ @testset "autodiff just one abundance" begin atm = read_model_atmosphere("data/sun.mod") - linelist = [Korg.Line(5000e-8, 0.0, Korg.species"C I", 0.0)] + linelist = [Korg.Line(6000e-8, 0.0, Korg.species"C I", 0.0)] + # If this line is super weak (or removed), the test will fail due to numerics in the + # abundances and continuum opacities. It used to be a fake line at 5000, but the fact that + # that's the reference wavelength caused instability in the finie differnces calculation. function f(A_C) A_X = format_A_X(Dict("C"=>A_C)) - synthesize(atm, linelist, A_X, 5000, 5000).flux[1] + synthesize(atm, linelist, A_X, 6000, 6000).flux[1] end @test FiniteDiff.finite_difference_derivative(f, 0.0) ≈ ForwardDiff.derivative(f, 0.0) rtol=1e-4 end @@ -30,8 +33,10 @@ @testset "line params" begin atm = read_model_atmosphere("data/sun.mod") function f(loggf) - linelist = [Korg.Line(5000e-8, loggf, Korg.species"Na I", 0.0)] - synthesize(atm, linelist, format_A_X(), 5000, 5000).flux[1] + linelist = [Korg.Line(6000e-8, loggf, Korg.species"Na I", 0.0)] + # This used to be a fake line at 5000, but the fact that that's the reference wavelength + # caused instability in the finie differnces calculation. + synthesize(atm, linelist, format_A_X(), 6000, 6000).flux[1] end @test FiniteDiff.finite_difference_derivative(f, 0.0) ≈ ForwardDiff.derivative(f, 0.0) rtol=1e-4 end From d758fae4620c2a8c576f362e56ea1d560f114c36 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Tue, 9 Jul 2024 17:39:23 -0400 Subject: [PATCH 07/22] add parameter to keep lines outside of wl range --- src/prune_linelist.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/prune_linelist.jl b/src/prune_linelist.jl index 4469c694..f3ee9361 100644 --- a/src/prune_linelist.jl +++ b/src/prune_linelist.jl @@ -21,6 +21,8 @@ equivalent width. order is much faster, but sorting by strength is useful for visualizing the strongest lines. - `verbose=true`: If `true`, a progress bar will be displayed while measuring the EWs. All other kwargs are passed to internal calls to [`synthesize`](@ref). +- `max_distance=0.0`, how far from `wls` lines can be before they are excluded from the returned + list. !!! caution While this function can be used to prune a linelist for synthesis, the default behavior too @@ -32,7 +34,8 @@ All other kwargs are passed to internal calls to [`synthesize`](@ref). See also [`merge_close_lines`](@ref) if you are using this for plotting. """ function prune_linelist(atm, linelist, A_X, wls...; - threshold=0.1, sort_by_EW=true, verbose=true, synthesis_kwargs...) + threshold=0.1, sort_by_EW=true, verbose=true, max_distance=0.0, + synthesis_kwargs...) # linelist will be sorted after call to synthesize sol = synthesize(atm, linelist, A_X, wls...; synthesis_kwargs...) cntm_sol = synthesize(atm, [], A_X, wls...; synthesis_kwargs...) @@ -59,7 +62,7 @@ function prune_linelist(atm, linelist, A_X, wls...; strong_lines = eltype(linelist)[] for line in linelist line_center = line.wl * 1e8 - if !any(λs[begin] < line_center < λs[end] for λs in wl_ranges) + if !any((λs[begin]-max_distance) < line_center < (λs[end]+max_distance) for λs in wl_ranges) continue end From 5b6750914fe25b32926f892924804e403af09e82 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 10 Jul 2024 14:42:17 -0400 Subject: [PATCH 08/22] correct docstring --- src/prune_linelist.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prune_linelist.jl b/src/prune_linelist.jl index f3ee9361..15de542b 100644 --- a/src/prune_linelist.jl +++ b/src/prune_linelist.jl @@ -27,7 +27,7 @@ All other kwargs are passed to internal calls to [`synthesize`](@ref). !!! caution While this function can be used to prune a linelist for synthesis, the default behavior too aggressive for this purpose. Set a much lower threshold (e.g. `threshold=1e-4`) and use - `sort=false` if you are pruning the linelist to speedup synthesis. Note that Korg will + `sort_by_EW=false` if you are pruning the linelist to speedup synthesis. Note that Korg will dynamically choose which lines to include even if you use a large linelist (see the `line_cutoff_threshold` keyword argument to [`synthesize`](@ref)). From dd7c3cd6a6b88ff8d8205c37fd660a4f64ad744b Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 10 Jul 2024 14:43:43 -0400 Subject: [PATCH 09/22] built-in 5000 angstrom linelist --- .../linelists/alpha_5000/alpha_5000_lines.csv | 410 ++++++++++++++++++ src/linelist.jl | 23 +- 2 files changed, 430 insertions(+), 3 deletions(-) create mode 100644 data/linelists/alpha_5000/alpha_5000_lines.csv diff --git a/data/linelists/alpha_5000/alpha_5000_lines.csv b/data/linelists/alpha_5000/alpha_5000_lines.csv new file mode 100644 index 00000000..025e5a8a --- /dev/null +++ b/data/linelists/alpha_5000/alpha_5000_lines.csv @@ -0,0 +1,410 @@ +wl,log_gf,species,E_lower,gamma_rad,gamma_stark,vdW +4.98008088553471e-5,-0.953000009059906,Fe I,4.076000213623047,4.89778883899247e7,1.949844428490234e-5,3.162277660168379e-8 +4.981555577314351e-5,0.07000000029802322,Ni I,3.6059999465942383,1.0964780998322171e8,1.4454392628956644e-5,"(2.3550398577336473e-14, 0.2820000000000391)" +4.9831204930710054e-5,0.5699999928474426,Ti I,0.8479999899864197,8.912505467113453e7,8.912505467113453e-7,"(9.016918361358318e-15, 0.24500000000000455)" +4.983889597404408e-5,0.15600000321865082,Fe I,4.103000164031982,2.951211041237279e8,1.995263191254866e-5,3.0199517204020194e-8 +4.984204281009158e-5,-0.9160000085830688,Na I,2.1040000915527344,3.257993257563704e7,0.0001393300549140245,0.0 +4.9846407969826836e-5,-0.12200000137090683,Fe I,4.1539998054504395,2.951211041237279e8,2.6915337400578165e-5,3.090295432513592e-8 +4.9852431570186045e-5,-0.006000000052154064,Fe I,4.103000164031982,2.951211041237279e8,1.995263191254866e-5,3.0199517204020194e-8 +4.9855069270977866e-5,0.3100000023841858,Ni I,3.7960000038146973,1.949844428490234e8,2.6302684539632834e-6,3.090295432513592e-8 +4.986643729129015e-5,-0.44699999690055847,Fe I,3.928999900817871,1.5488151224416983e8,2.6915337400578163e-6,"(2.07781162239996e-14, 0.2400000000000091)" +4.9869377072352285e-5,-1.3309999704360962,Fe I,2.865000009536743,1.513562312005786e8,3.890452816839944e-6,"(2.0358073443190984e-14, 0.2380000000000564)" +4.987613786861919e-5,-1.2899999618530273,Fe I,4.2179999351501465,2.951211041237279e8,1.8620870548831208e-5,"(2.6602709451212427e-14, 0.27899999999999636)" +4.990031829319843e-5,-0.028999999165534973,Nd I,0.2930000126361847,2.505735504814822e8,5.534421337962145e-6,0.0 +4.990341711654829e-5,-0.8899999856948853,Fe I,4.1539998054504395,2.951211041237279e8,2.6302684539632837e-5,"(2.4194464174576354e-14, 0.27800000000002)" +4.990521959546391e-5,-0.1599999964237213,Ti I,1.9809999465942383,9.120109194638906e7,4.89778883899247e-6,"(2.2066247418479358e-14, 0.23099999999999454)" +4.992458474081321e-5,0.44999998807907104,Ti I,0.8360000252723694,8.70963704709875e7,8.912505467113453e-7,"(8.960912657250501e-15, 0.24500000000000455)" +4.9926605277679604e-5,-0.6700000166893005,Fe I,4.190999984741211,2.884031756450285e8,2.0417376756604133e-5,"(2.551059822111002e-14, 0.27800000000002)" +4.993233680057967e-5,-0.9890000224113464,Ca I,4.769000053405762,2.3442281975923815e8,0.00018197008186508767,7.244359600749906e-8 +4.9932590868087154e-5,-1.809999942779541,Fe I,4.21999979019165,2.3988335511359206e8,2.0417376756604133e-5,"(2.6602709451212427e-14, 0.27899999999999636)" +4.9946960686279374e-5,0.3315720856189728,HMg,0.7440000176429749,5.737144794327242e8,0.0,0.0 +4.995073068801377e-5,-1.3700000047683716,Fe I,4.209000110626221,1.0232935315766703e8,3.1622776601683795e-5,"(2.5986646706026458e-14, 0.27899999999999636)" +4.9951551906221804e-5,0.34357210993766785,HMg,0.7440000176429749,5.896794544495568e8,0.0,0.0 +4.9955227882977725e-5,-3.058000087738037,Fe I,0.9150000214576721,1.737799912893992e7,7.079456289251887e-7,"(6.888701605261323e-15, 0.24500000000000455)" +4.996018419994359e-5,0.5419999957084656,Ce I,0.9649999737739563,9.308801968192089e8,9.545655907074916e-6,0.0 +4.996165459064934e-5,0.12157212197780609,HMg,0.824999988079071,3.535414626920365e8,0.0,0.0 +4.996239478733138e-5,0.23057211935520172,HMg,0.7799999713897705,4.5438865908664876e8,0.0,0.0 +4.996458837020228e-5,-1.0,Ti I,2.25,3.090293803866819e8,1.5848924964027186e-6,2.3442288153199228e-8 +4.996560664077395e-5,-0.6710000038146973,Ca I,4.763000011444092,2.4547108562064812e8,0.00014791086480080837,7.079457843841373e-8 +4.9966485874401424e-5,0.24357210099697113,HMg,0.781000018119812,4.681190823839481e8,0.0,0.0 +4.9966785954137814e-5,0.13557212054729462,HMg,0.824999988079071,3.65048987482561e8,0.0,0.0 +4.996801528079149e-5,-1.7899999618530273,Fe I,4.260000228881836,1.0232935315766703e8,1.5135606501786491e-5,"(2.775082638542265e-14, 0.2799999999999727)" +4.997043992506343e-5,-1.1239999532699585,Ni I,3.634999990463257,1.819701817628807e8,0.00025118869830988676,"(2.3298372908851305e-14, 0.27800000000002)" +4.9972649512192337e-5,-2.4079999923706055,Fe I,4.230999946594238,3.019948537254365e8,1.9054616384945496e-5,3.0199517204020194e-8 +4.9977238731639125e-5,-0.07814371585845947,OV,0.5680000185966492,2.2307639974543053e8,0.0,0.0 +4.997727874227077e-5,-0.08514371514320374,OV,0.5680000185966492,2.195093036758588e8,0.0,0.0 +4.99773087502445e-5,-0.09114371985197067,OV,0.5680000185966492,2.164972607893663e8,0.0,0.0 +4.9977348760876156e-5,-0.09714371711015701,OV,0.5690000057220459,2.1352646647150606e8,0.0,0.0 +4.9979293277574864e-5,-2.490999937057495,Fe I,4.185999870300293,1.513560650178649e7,8.511377017774278e-6,2.0417379446695274e-8 +4.997974939877597e-5,-0.22014370560646057,OV,0.5120000243186951,1.6084590309940183e8,0.0,0.0 +4.9979769404091807e-5,-0.22914370894432068,OV,0.5120000243186951,1.5754682394695735e8,0.0,0.0 +4.9979789409407644e-5,-0.2381437122821808,OV,0.5120000243186951,1.5431541156781772e8,0.0,0.0 +4.9979809414723496e-5,-0.2471437156200409,OV,0.5120000243186951,1.5115027806190497e8,0.0,0.0 +4.9981631898996956e-5,-1.781000018119812,Fe I,4.6519999504089355,1.4791086480080837e8,2.5703948796691974e-5,4.78630092322638e-8 +4.9982384098873025e-5,-0.8960000276565552,Ni I,3.634999990463257,1.7782794100389227e8,2.8840317564502843e-5,"(2.3270370056797396e-14, 0.27800000000002)" +4.9983090286522805e-5,-0.11914371699094772,OV,0.6190000176429749,2.029326531332947e8,0.0,0.0 +4.9983200315760025e-5,-0.11314371973276138,OV,0.6190000176429749,2.0575482038141638e8,0.0,0.0 +4.9983340352971046e-5,-0.10614372044801712,OV,0.6190000176429749,2.0909689527093843e8,0.0,0.0 +4.998347038752415e-5,-0.10014371573925018,OV,0.6190000176429749,2.1200462205000567e8,0.0,0.0 +4.9984280602816646e-5,-0.05214371532201767,OV,0.8090000152587891,2.367724948870489e8,0.0,0.0 +4.9984907769469126e-5,-2.069999933242798,Ti I,0.0,7.943284091521297e6,7.762468779884148e-7,"(7.224735829908217e-15, 0.24200000000001864)" +4.998614109719278e-5,-0.005143715534359217,OV,0.7210000157356262,2.6381465706125516e8,0.0,0.0 +4.99864011662992e-5,-0.00014371545694302768,OV,0.7210000157356262,2.668667099349613e8,0.0,0.0 +4.9986661235405656e-5,0.004856284707784653,OV,0.7200000286102295,2.699540718586684e8,0.0,0.0 +4.9986931307170046e-5,0.009856284596025944,OV,0.7200000286102295,2.73077041804644e8,0.0,0.0 +4.998937995783503e-5,0.026000000536441803,Ti I,3.2149999141693115,1.0e8,5.370318199557904e-6,2.8840315031266057e-8 +4.99911344240397e-5,-0.8830000162124634,Ti I,3.1040000915527344,4.7862990313698694e7,1.9054616384945496e-5,3.8018939632056126e-8 +4.999356607018928e-5,-1.5670000314712524,Fe I,4.60699987411499,2.0892946627203616e8,4.365156980428764e-5,4.8977881936844667e-8 +4.999362308533965e-5,0.4013287425041199,OZr,1.0190000534057617,6.72421168130881e8,0.0,0.0 +4.999402119112656e-5,-0.6480000019073486,Mn I,4.425000190734863,5.0118701351428103e8,3.235938274699711e-5,6.025595860743581e-8 +4.9995155492539754e-5,-0.5049999952316284,Mn I,4.425000190734863,5.0118701351428103e8,3.8904528168399443e-5,6.025595860743581e-8 +4.999518349998206e-5,-0.6029999852180481,Ce I,0.27399998903274536,6.6571070213908084e7,5.38709293313387e-6,0.0 +4.9995693635538396e-5,0.7863287329673767,OZr,1.340999960899353,1.6315688090627112e9,0.0,0.0 +4.999612374983104e-5,-0.6899999976158142,Ni I,3.6059999465942383,1.3489632380568445e8,3.467368199963294e-6,"(1.9966033514436275e-14, 0.2380000000000564)" +4.999632380299045e-5,0.037328749895095825,OZr,0.9309999942779541,2.908000408389339e8,0.0,0.0 +4.99969239624687e-5,-0.21114371716976166,OV,0.5180000066757202,1.6410112922794044e8,0.0,0.0 +4.999695397044261e-5,-0.22014370560646057,OV,0.5189999938011169,1.607352240072203e8,0.0,0.0 +4.999695397044261e-5,0.4283287525177002,OZr,1.152999997138977,7.154569683380002e8,0.0,0.0 +4.9996963973100576e-5,-0.22914370894432068,OV,0.5189999938011169,1.574384780114958e8,0.0,0.0 +4.9996993981074505e-5,-0.2381437122821808,OV,0.5189999938011169,1.5420922623348618e8,0.0,0.0 +4.9997554129920974e-5,-0.029143717139959335,OV,1.281000018119812,2.4951727675771877e8,0.0,0.0 +4.999770416979059e-5,-0.02414371632039547,OV,1.281000018119812,2.524050362181822e8,0.0,0.0 +4.9997804196370333e-5,-0.12814371287822723,OV,0.6340000033378601,1.9865352776526058e8,0.0,0.0 +4.9997844207002226e-5,-0.13314370810985565,OV,0.6349999904632568,1.9637924748879176e8,0.0,0.0 +4.99978542096602e-5,-0.020143715664744377,OV,1.2799999713897705,2.5473898273542354e8,0.0,0.0 +4.999787421497615e-5,-0.139143705368042,OV,0.6349999904632568,1.9368459193129098e8,0.0,0.0 +4.999791422560805e-5,-0.1441437155008316,OV,0.6349999904632568,1.9146719183171442e8,0.0,0.0 +4.999792422826602e-5,0.4713287353515625,OZr,1.3619999885559082,7.898900529338393e8,0.0,0.0 +4.999793022986081e-5,-0.6880000233650208,Mn I,4.425000190734863,5.0118701351428103e8,4.5708802901852083e-5,6.025595860743581e-8 +4.999802425484577e-5,-0.016143716871738434,OV,1.2790000438690186,2.5709430402347225e8,0.0,0.0 +4.999806426547767e-5,0.18099312484264374,OZr,1.128999948501587,4.0478890614835835e8,0.0,0.0 +4.9998074268135646e-5,0.21399317681789398,OZr,1.3339999914169312,4.367455410009398e8,0.0,0.0 +4.9998594406350405e-5,0.36820748448371887,OZr,1.5440000295639038,6.229221176644114e8,0.0,0.0 +4.999860440900839e-5,0.13232874870300293,OZr,1.1959999799728394,3.618718842662126e8,0.0,0.0 +4.999872444090411e-5,0.6493287682533264,OZr,1.1230000257492065,1.1900159329003663e9,0.0,0.0 +4.999878445685198e-5,-0.07279249280691147,OZr,1.0260000228881836,2.256474720539956e8,0.0,0.0 +4.999890448874771e-5,-0.6326712369918823,OZr,0.6660000085830688,6.216553034571084e7,0.0,0.0 +4.999891449140569e-5,0.7143287062644958,OZr,1.6009999513626099,1.3821316511550255e9,0.0,0.0 +4.9999074533933326e-5,-0.4357925057411194,OZr,0.9359999895095825,9.781949586410715e7,0.0,0.0 +4.9999154555197145e-5,-3.042160749435425,HSi,1.2890000343322754,242134.00551104246,0.0,0.0 +4.9999304595066834e-5,-2.2284278869628906,HMg,0.6589999794960022,1.5768342421011596e6,0.0,0.0 +4.999935460835674e-5,-1.100000023841858,Nd II,0.47099998593330383,2.1194005206290394e7,2.9527786182017934e-6,0.0 +4.999935460835674e-5,-0.22214370965957642,OV,1.4919999837875366,1.5998134764648256e8,0.0,0.0 +4.999936461101472e-5,0.7963287234306335,OZr,1.2309999465942383,1.6693277395140712e9,0.0,0.0 +4.9999404621646627e-5,-0.34567123651504517,OZr,1.1339999437332153,1.2037629026346499e8,0.0,0.0 +4.9999444632278546e-5,-1.7976711988449097,OZr,0.5239999890327454,4.251481540810983e6,0.0,0.0 +4.99994646375945e-5,-2.693006992340088,OZr,0.4020000100135803,541008.5849895834,0.0,0.0 +4.999947464025248e-5,-0.2211437076330185,OV,1.4919999837875366,1.6034937359664282e8,0.0,0.0 +4.999952465354238e-5,-0.8707925081253052,OZr,1.4789999723434448,3.5926722409523845e7,0.0,0.0 +4.999952465354238e-5,-2.189006805419922,OZr,0.5730000138282776,1.7266459769794247e6,0.0,0.0 +4.999953465620036e-5,-1.9574278593063354,HMg,1.2239999771118164,2.9429445099583627e6,0.0,0.0 +4.999953465620036e-5,-1.3050637245178223,OZr,0.6610000133514404,1.3217405323254362e7,0.0,0.0 +4.999953465620036e-5,-0.33879250288009644,OZr,1.4220000505447388,1.2229745791776104e8,0.0,0.0 +4.999953465620036e-5,-2.8480067253112793,OZr,0.5220000147819519,378619.70034182066,0.0,0.0 +4.999954465885835e-5,-2.9327924251556396,OZr,0.4009999930858612,311470.79675965937,0.0,0.0 +4.999955466151632e-5,-2.379006862640381,OZr,0.6209999918937683,1.1148147920534057e6,0.0,0.0 +4.999957466683229e-5,-2.2036712169647217,OZr,1.0980000495910645,1.6693139424486803e6,0.0,0.0 +4.999957466683229e-5,-3.432671070098877,OZr,0.6050000190734863,98523.12251558066,0.0,0.0 +4.999957466683229e-5,-3.0647926330566406,OZr,0.5960000157356262,229835.2325879281,0.0,0.0 +4.999957466683229e-5,-0.9510068297386169,OZr,0.921999990940094,2.9867743151084185e7,0.0,0.0 +4.9999594672148235e-5,-2.296792507171631,OZr,0.5090000033378601,1.347151326167343e6,0.0,0.0 +4.9999594672148235e-5,-0.841006875038147,OZr,1.024999976158142,3.847707192096881e7,0.0,0.0 +4.999960467480622e-5,-2.560006856918335,OZr,0.46399998664855957,734855.3485207633,0.0,0.0 +4.9999614677464195e-5,-0.22014370560646057,OV,1.4919999837875366,1.6071811755698964e8,0.0,0.0 +4.9999614677464195e-5,-2.009063720703125,OZr,0.9909999966621399,2.6130325634534904e6,0.0,0.0 +4.999963468278016e-5,-3.7941436767578125,OV,1.1460000276565552,42861.218984005165,0.0,0.0 +4.999963468278016e-5,-3.048792600631714,OZr,0.46700000762939453,238460.03010845752,0.0,0.0 +4.9999644685438145e-5,-2.0840067863464355,OZr,0.8809999823570251,2.1988785105445553e6,0.0,0.0 +4.9999644685438145e-5,-3.072006940841675,OZr,0.39899998903274536,226048.21422993453,0.0,0.0 +4.999967469341209e-5,-2.2820637226104736,OZr,0.7509999871253967,1.3936180974144305e6,0.0,0.0 +4.999967469341209e-5,-2.5860068798065186,OZr,0.40299999713897705,692150.632689476,0.0,0.0 +4.999967469341209e-5,-3.868898630142212,OZr,0.5659999847412109,36083.51774719977,0.0,0.0 +4.9999684696070064e-5,-2.7686712741851807,OZr,0.8220000267028809,454502.26522583957,0.0,0.0 +4.9999684696070064e-5,-1.6477924585342407,OZr,1.6119999885559082,6.003643113740699e6,0.0,0.0 +4.9999684696070064e-5,-0.5030068755149841,OZr,1.9509999752044678,8.37915937091962e7,0.0,0.0 +4.9999684696070064e-5,-3.000898599624634,OZr,1.1820000410079956,266261.7160123098,0.0,0.0 +4.999970470138602e-5,-4.236898899078369,OZr,0.699999988079071,15463.510004258593,0.0,0.0 +4.999971470404401e-5,-3.154792547225952,OZr,0.847000002861023,186816.08119977504,0.0,0.0 +4.999972470670199e-5,-1.3917925357818604,OZr,1.5410000085830688,1.0824655794318628e7,0.0,0.0 +4.999972470670199e-5,-0.16400684416294098,OZr,2.436000108718872,1.828941384429784e8,0.0,0.0 +4.999972470670199e-5,-2.564898729324341,OZr,1.11899995803833,726620.9274978348,0.0,0.0 +4.9999744712017944e-5,-0.21914370357990265,OV,1.4919999837875366,1.6108777394646308e8,0.0,0.0 +4.9999744712017944e-5,-2.872006893157959,OZr,0.9520000219345093,358260.88180066727,0.0,0.0 +4.9999744712017944e-5,-4.0850067138671875,OZr,0.4749999940395355,21938.128187795257,0.0,0.0 +4.999975471467592e-5,-1.5800068378448486,OZr,1.9589999914169312,7.017772286344144e6,0.0,0.0 +4.999976471733391e-5,-1.0840637683868408,OZr,1.6729999780654907,2.1985794673496157e7,0.0,0.0 +4.999977471999189e-5,-2.58779239654541,OZr,1.3459999561309814,689308.0745235148,0.0,0.0 +4.999977471999189e-5,-3.536792516708374,OZr,0.6370000243186951,77519.90747183756,0.0,0.0 +4.9999784722649864e-5,-0.8946712613105774,OZr,1.187000036239624,3.4004338229078524e7,0.0,0.0 +4.9999784722649864e-5,-2.4756712913513184,OZr,1.475000023841858,892348.0876377083,0.0,0.0 +4.9999784722649864e-5,-1.8257925510406494,OZr,1.034000039100647,3.984859721325422e6,0.0,0.0 +4.999979472530784e-5,-0.7066712379455566,OZr,2.200000047683716,5.242448549499573e7,0.0,0.0 +4.999979472530784e-5,-1.7770637273788452,OZr,1.274999976158142,4.458016663316453e6,0.0,0.0 +4.999979472530784e-5,-2.396792411804199,OZr,0.746999979019165,1.0700720068637019e6,0.0,0.0 +4.999979472530784e-5,-2.3858985900878906,OZr,1.4910000562667847,1.0972531208548243e6,0.0,0.0 +4.9999807728763215e-5,-3.8299999237060547,Cr I,3.013000011444092,1.14815347022194e6,7.762468779884148e-7,1.6218100973589297e-8 +4.9999814730623814e-5,-3.1387925148010254,OZr,0.8980000019073486,193826.23173167687,0.0,0.0 +4.9999814730623814e-5,0.3269931972026825,OZr,1.2369999885559082,5.664978481373866e8,0.0,0.0 +4.9999814730623814e-5,-3.7698986530303955,OZr,1.0789999961853027,45321.72322632295,0.0,0.0 +4.999983473593976e-5,-3.433671236038208,OZr,0.9139999747276306,98295.46550781858,0.0,0.0 +4.999984473859775e-5,-3.7971436977386475,OV,1.1460000276565552,42565.80472036059,0.0,0.0 +4.999984473859775e-5,-1.7630637884140015,OZr,1.6759999990463257,4.604057698459765e6,0.0,0.0 +4.999984473859775e-5,-1.7477924823760986,OZr,1.1319999694824219,4.768832445770311e6,0.0,0.0 +4.999984473859775e-5,-1.8057925701141357,OZr,1.309999942779541,4.172650173850394e6,0.0,0.0 +4.999984473859775e-5,-2.5607924461364746,OZr,0.47099998593330383,733520.2367373876,0.0,0.0 +4.999984473859775e-5,-2.8898985385894775,OZr,0.871999979019165,343800.1069350865,0.0,0.0 +4.999985474125574e-5,-1.9580637216567993,OZr,0.9259999990463257,2.938601193189383e6,0.0,0.0 +4.999986474391372e-5,-2.7814278602600098,HMg,1.0570000410079956,441343.0970109691,0.0,0.0 +4.999986474391372e-5,-2.3857924938201904,OZr,1.7890000343322754,1.0975181339195257e6,0.0,0.0 +4.9999874746571686e-5,-2.35579252243042,OZr,0.4129999876022339,1.176011320339539e6,0.0,0.0 +4.9999874746571686e-5,-3.6380069255828857,OZr,0.7319999933242798,61404.06166310824,0.0,0.0 +4.9999874746571686e-5,-2.1888985633850098,OZr,1.2990000247955322,1.7270521883337754e6,0.0,0.0 +4.9999884749229676e-5,-1.7027925252914429,OZr,1.527999997138977,5.28945985895434e6,0.0,0.0 +4.9999884749229676e-5,-2.186898708343506,OZr,1.6779999732971191,1.7350226257247236e6,0.0,0.0 +4.999990475454562e-5,-2.9084279537200928,HMg,1.0570000410079956,329439.4086564837,0.0,0.0 +4.999990475454562e-5,-4.347427845001221,HMg,1.0570000410079956,11988.798431503938,0.0,0.0 +4.999990475454562e-5,0.1573287546634674,OZr,1.840000033378601,3.83294209294375e8,0.0,0.0 +4.999990475454562e-5,-1.5016711950302124,OZr,0.9179999828338623,8.40489531189702e6,0.0,0.0 +4.999990475454562e-5,-1.6270068883895874,OZr,1.434999942779541,6.297912392276341e6,0.0,0.0 +4.999991475720361e-5,0.12332874536514282,OZr,1.246999979019165,3.5443130601667136e8,0.0,0.0 +4.999991475720361e-5,-2.108671188354492,OZr,0.984000027179718,2.0774574686028173e6,0.0,0.0 +4.999991475720361e-5,-0.20606376230716705,OZr,2.0880000591278076,1.6601203275092733e8,0.0,0.0 +4.999991475720361e-5,-0.8720068335533142,OZr,1.4700000286102295,3.5825849414822996e7,0.0,0.0 +4.999991475720361e-5,-1.4250068664550781,OZr,1.4490000009536743,1.0027587567531172e7,0.0,0.0 +4.999991475720361e-5,-1.43800687789917,OZr,1.3350000381469727,9.731873425271405e6,0.0,0.0 +4.9999924759861596e-5,-2.0776712894439697,OZr,0.4779999852180481,2.231165913821135e6,0.0,0.0 +4.9999924759861596e-5,-2.260063886642456,OZr,1.968000054359436,1.4660178872253655e6,0.0,0.0 +4.9999924759861596e-5,-2.714063882827759,OZr,1.628000020980835,515393.89878236176,0.0,0.0 +4.9999924759861596e-5,-3.2467925548553467,OZr,0.828000009059906,151150.85252942378,0.0,0.0 +4.9999924759861596e-5,-3.484006881713867,OZr,1.0010000467300415,87537.930304434,0.0,0.0 +4.999993476251958e-5,-0.21414370834827423,OV,1.6519999504089355,1.6295184189569744e8,0.0,0.0 +4.999993476251958e-5,-0.6886712312698364,OZr,1.7489999532699585,5.464264971649241e7,0.0,0.0 +4.999993476251958e-5,-1.2656712532043457,OZr,1.222000002861023,1.447210580386749e7,0.0,0.0 +4.999993476251958e-5,0.7403287291526794,OZr,2.193000078201294,1.4673432254026985e9,0.0,0.0 +4.999993476251958e-5,-1.5750638246536255,OZr,2.2720000743865967,7.098051686943148e6,0.0,0.0 +4.999993476251958e-5,-0.9507924914360046,OZr,0.9340000152587891,2.9882057060381886e7,0.0,0.0 +4.999993476251958e-5,-3.755006790161133,OZr,1.034000039100647,46902.52158415407,0.0,0.0 +4.999993476251958e-5,-2.9418985843658447,OZr,0.7310000061988831,305003.2013503134,0.0,0.0 +4.999994476517756e-5,-2.361671209335327,OZr,1.5750000476837158,1.1601966283899478e6,0.0,0.0 +4.999994476517756e-5,-1.830063819885254,OZr,2.0820000171661377,3.945835615664724e6,0.0,0.0 +4.999994476517756e-5,-0.372792512178421,OZr,1.7569999694824219,1.1308637845816664e8,0.0,0.0 +4.999995476783553e-5,-2.011671304702759,OZr,1.5889999866485596,2.597355107295127e6,0.0,0.0 +4.999995476783553e-5,-0.8950637578964233,OZr,1.3669999837875366,3.397338937854219e7,0.0,0.0 +4.999995476783553e-5,-1.6457924842834473,OZr,1.4179999828338623,6.031289157839344e6,0.0,0.0 +4.999995476783553e-5,-0.8910068273544312,OZr,1.8890000581741333,3.429223626616269e7,0.0,0.0 +4.999995476783553e-5,-1.894898533821106,OZr,1.9229999780654907,3.398631675839362e6,0.0,0.0 +4.999995476783553e-5,-3.3908987045288086,OZr,0.9860000014305115,108468.57385421517,0.0,0.0 +4.9999964770493516e-5,-3.7991435527801514,OV,1.1449999809265137,42370.04332374106,0.0,0.0 +4.9999964770493516e-5,-1.994006872177124,OZr,2.0269999504089355,2.7051763918774333e6,0.0,0.0 +4.9999964770493516e-5,-2.2090067863464355,OZr,1.350000023841858,1.648905150269482e6,0.0,0.0 +4.9999964770493516e-5,-3.427006721496582,OZr,1.1039999723434448,99814.98350963855,0.0,0.0 +4.9999964770493516e-5,-2.1508986949920654,OZr,2.0169999599456787,1.8849670625755026e6,0.0,0.0 +4.99999747731515e-5,-2.1887924671173096,OZr,0.5820000171661377,1.7274672395401155e6,0.0,0.0 +4.99999747731515e-5,-1.026006817817688,OZr,1.7979999780654907,2.513017247437381e7,0.0,0.0 +4.99999747731515e-5,-1.5660068988800049,OZr,2.190000057220459,7.2476195567207085e6,0.0,0.0 +4.99999747731515e-5,-4.004898548126221,OZr,0.40299999713897705,26381.758408509904,0.0,0.0 +4.999998477580948e-5,-3.43467116355896,OZr,0.925000011920929,98068.82000523714,0.0,0.0 +4.999998477580948e-5,-2.5147924423217773,OZr,0.765999972820282,815473.1590628625,0.0,0.0 +4.999999477846745e-5,-1.2040637731552124,OZr,0.9240000247955322,1.6677777147985633e7,0.0,0.0 +4.999999477846745e-5,-2.5077924728393555,OZr,1.6239999532699585,828723.1421574334,0.0,0.0 +4.999999477846745e-5,-1.7370069026947021,OZr,1.2170000076293945,4.888718570141666e6,0.0,0.0 +4.999999477846745e-5,-4.223898887634277,OZr,0.9739999771118164,15933.201625665546,0.0,0.0 +5.0000004781125456e-5,-2.4078986644744873,OZr,1.8459999561309814,1.0430451339207663e6,0.0,0.0 +5.0000014783783426e-5,0.4643287658691406,OZr,1.4079999923706055,7.771956441520269e8,0.0,0.0 +5.000002478644141e-5,-2.172792434692383,OZr,1.8730000257492065,1.7922928966903163e6,0.0,0.0 +5.000003478909939e-5,-0.6376712322235107,OZr,2.7109999656677246,6.145114965645796e7,0.0,0.0 +5.000003478909939e-5,-5.186671257019043,OZr,0.5210000276565552,1735.9211218903872,0.0,0.0 +5.000003478909939e-5,-1.6287925243377686,OZr,2.1059999465942383,6.272038566828466e6,0.0,0.0 +5.000003478909939e-5,-1.469006896018982,OZr,1.4279999732971191,9.061380104950177e6,0.0,0.0 +5.000003478909939e-5,-5.082602500915527,OTi,1.656000018119812,1.644372026530779e7,0.0,0.0 +5.000004479175736e-5,-0.35714370012283325,OV,2.2300000190734863,1.1723502236364797e8,0.0,0.0 +5.000004479175736e-5,-2.552671194076538,OZr,1.4910000562667847,747360.0459804181,0.0,0.0 +5.000004479175736e-5,-2.271792411804199,OZr,0.7710000276565552,1.4269496817268517e6,0.0,0.0 +5.000004479175736e-5,-3.317006826400757,OZr,1.3930000066757202,128586.16511263944,0.0,0.0 +5.000005479441536e-5,-1.1326712369918823,OZr,1.1180000305175781,1.9657562266041804e7,0.0,0.0 +5.000005479441536e-5,-2.5256712436676025,OZr,1.503000020980835,795297.5660133384,0.0,0.0 +5.000005479441536e-5,-2.341792583465576,OZr,1.909999966621399,1.2145301867162078e6,0.0,0.0 +5.000005479441536e-5,-2.8230068683624268,OZr,0.7170000076293945,401045.85181834793,0.0,0.0 +5.000005479441536e-5,-2.1998987197875977,OZr,1.8329999446868896,1.6838452540539533e6,0.0,0.0 +5.000005479441536e-5,-3.1328985691070557,OZr,1.6109999418258667,196472.7517744078,0.0,0.0 +5.000005479441536e-5,-3.1428985595703125,OZr,0.47699999809265137,192000.49015373306,0.0,0.0 +5.000006479707333e-5,-1.3226711750030518,OZr,2.378999948501587,1.2691984943029089e7,0.0,0.0 +5.000006479707333e-5,-1.8416712284088135,OZr,1.6799999475479126,3.8417534929059413e6,0.0,0.0 +5.000006479707333e-5,-2.4580068588256836,OZr,0.5130000114440918,929381.1599534266,0.0,0.0 +5.000006479707333e-5,-2.9758987426757812,OZr,0.5799999833106995,282034.333553476,0.0,0.0 +5.000007479973131e-5,-0.43067124485969543,OZr,1.7760000228881836,9.89758646876363e7,0.0,0.0 +5.000007479973131e-5,-2.826063871383667,OZr,1.4700000286102295,398232.479722638,0.0,0.0 +5.000007479973131e-5,-2.5787925720214844,OZr,0.9240000247955322,703733.0982685363,0.0,0.0 +5.0000084802389295e-5,-1.8340067863464355,OZr,1.4490000009536743,3.9101515427272697e6,0.0,0.0 +5.0000094805047265e-5,-1.096671223640442,OZr,2.0269999504089355,2.135644582086242e7,0.0,0.0 +5.0000094805047265e-5,-2.8336710929870605,OZr,1.6440000534057617,391317.3546056579,0.0,0.0 +5.0000094805047265e-5,-2.123006820678711,OZr,1.8700000047683716,2.0099876141611296e6,0.0,0.0 +5.0000104807705255e-5,-1.7980637550354004,OZr,1.468000054359436,4.247528221739781e6,0.0,0.0 +5.0000104807705255e-5,-3.2760069370269775,OZr,0.5180000066757202,141316.5710820703,0.0,0.0 +5.0000104807705255e-5,-2.808898687362671,OZr,1.625,414287.0334846097,0.0,0.0 +5.000011481036323e-5,-0.05867123603820801,OZr,1.5720000267028809,2.33092670943251e8,0.0,0.0 +5.000011481036323e-5,-1.9320638179779053,OZr,1.1330000162124634,3.119866683816746e6,0.0,0.0 +5.000011481036323e-5,-2.644063711166382,OZr,1.1619999408721924,605530.667584995,0.0,0.0 +5.000011481036323e-5,-0.8507924675941467,OZr,1.0199999809265137,3.761901212549606e7,0.0,0.0 +5.000011481036323e-5,-2.6380069255828857,OZr,1.2910000085830688,614034.7203020328,0.0,0.0 +5.000012481302122e-5,-2.4576711654663086,OZr,0.9629999995231628,930097.5816463757,0.0,0.0 +5.000012481302122e-5,-3.1887924671173096,OZr,0.5389999747276306,172745.68720231683,0.0,0.0 +5.0000134815679205e-5,-2.825063705444336,OZr,1.5729999542236328,399149.6946969346,0.0,0.0 +5.0000144818337195e-5,-0.4676712453365326,OZr,0.9459999799728394,9.089250814154251e7,0.0,0.0 +5.0000144818337195e-5,-2.6030638217926025,OZr,1.5670000314712524,665480.7713281197,0.0,0.0 +5.0000154820995165e-5,-1.233063817024231,OZr,1.2879999876022339,1.5600385931377305e7,0.0,0.0 +5.0000154820995165e-5,-2.3807923793792725,OZr,0.41200000047683716,1.1102142055264278e6,0.0,0.0 +5.0000154820995165e-5,-1.508483648300171,OTi,3.1029999256134033,4.246193513525526e6,0.0,0.0 +5.0000174826311125e-5,-1.1317925453186035,OZr,0.6570000052452087,1.9697280361701082e7,0.0,0.0 +5.0000184828969115e-5,-1.4956711530685425,OZr,1.194000005722046,8.521724406906854e6,0.0,0.0 +5.0000184828969115e-5,-2.259671211242676,OZr,1.7999999523162842,1.46732874954441e6,0.0,0.0 +5.0000184828969115e-5,-1.9640637636184692,OZr,1.559000015258789,2.898243526040551e6,0.0,0.0 +5.0000184828969115e-5,-1.2047924995422363,OZr,2.109999895095825,1.664968949025795e7,0.0,0.0 +5.0000194831627085e-5,-2.8862557411193848,CN,1.5190000534057617,346691.1241540598,0.0,0.0 +5.0000194831627085e-5,-1.2596712112426758,OZr,1.6619999408721924,1.4673281624592518e7,0.0,0.0 +5.0000194831627085e-5,-1.7706711292266846,OZr,0.4230000078678131,4.524049363917098e6,0.0,0.0 +5.0000194831627085e-5,-2.3777923583984375,OZr,1.6410000324249268,1.1179081076365395e6,0.0,0.0 +5.000020483428508e-5,-0.6186712384223938,OZr,0.8640000224113464,6.4198820955663756e7,0.0,0.0 +5.000020483428508e-5,-0.7456712126731873,OZr,2.125,4.7921133034976766e7,0.0,0.0 +5.000020483428508e-5,-2.295671224594116,OZr,0.40400001406669617,1.3506009968537325e6,0.0,0.0 +5.000020483428508e-5,-2.1357924938201904,OZr,0.7390000224113464,1.9516673498003685e6,0.0,0.0 +5.000020483428508e-5,-1.4620068073272705,OZr,1.9270000457763672,9.20855493296552e6,0.0,0.0 +5.000021483694305e-5,-4.4600067138671875,OZr,0.734000027179718,9251.057980737565,0.0,0.0 +5.000021483694305e-5,-3.12389874458313,OZr,1.4179999828338623,200585.4246238145,0.0,0.0 +5.0000224839601035e-5,-1.872671127319336,OZr,1.7599999904632568,3.5770648661720115e6,0.0,0.0 +5.0000224839601035e-5,-1.671898603439331,OZr,1.4620000123977661,5.679359230968138e6,0.0,0.0 +5.000023484225902e-5,-1.3050068616867065,OZr,1.8489999771118164,1.3218765781495418e7,0.0,0.0 +5.000023484225902e-5,-1.2578985691070557,OZr,2.0460000038146973,1.473327177689684e7,0.0,0.0 +5.0000244844917e-5,-2.2116713523864746,OZr,1.2289999723434448,1.6388010860175989e6,0.0,0.0 +5.0000244844917e-5,-2.7626712322235107,OZr,1.1749999523162842,460814.74096387316,0.0,0.0 +5.0000244844917e-5,-2.6360068321228027,OZr,0.40299999713897705,616865.8999926044,0.0,0.0 +5.000025484757499e-5,-1.1366711854934692,OZr,1.4320000410079956,1.9477187102472093e7,0.0,0.0 +5.000025484757499e-5,-2.2186713218688965,OZr,1.2380000352859497,1.6125979368833965e6,0.0,0.0 +5.000025484757499e-5,-1.4500068426132202,OZr,1.5440000295639038,9.466524846121222e6,0.0,0.0 +5.0000264850232975e-5,-0.8916712403297424,OZr,1.7589999437332153,3.4239389118355066e7,0.0,0.0 +5.0000274852890944e-5,-3.5336711406707764,OZr,0.4779999852180481,78077.5062037413,0.0,0.0 +5.0000274852890944e-5,-0.3990068733692169,OZr,1.027999997138977,1.0646091655095312e8,0.0,0.0 +5.00003048608649e-5,-1.7066712379455566,OZr,0.5910000205039978,5.242341576321076e6,0.0,0.0 +5.00003048608649e-5,-1.6120069026947021,OZr,1.1039999723434448,6.519130130139576e6,0.0,0.0 +5.0000324866180854e-5,-3.669471263885498,OTi,1.8960000276565552,1.5703631629656566e7,0.0,0.0 +5.000033486883884e-5,-2.878063917160034,OZr,0.7360000014305115,353290.62613292254,0.0,0.0 +5.000033486883884e-5,-3.6568984985351562,OZr,0.6589999794960022,58789.19765723921,0.0,0.0 +5.000034487149682e-5,-1.0280637741088867,OZr,1.465999960899353,2.5011059174637385e7,0.0,0.0 +5.000034487149682e-5,-1.818063735961914,OZr,1.2389999628067017,4.0563191878003376e6,0.0,0.0 +5.000035487415479e-5,-1.2766711711883545,OZr,1.6390000581741333,1.4109918748459168e7,0.0,0.0 +5.000035487415479e-5,-0.6150068640708923,OZr,2.1019999980926514,6.474240377921285e7,0.0,0.0 +5.000035487415479e-5,-0.7928985953330994,OZr,2.0309998989105225,4.2983036118189834e7,0.0,0.0 +5.0000364876812794e-5,-1.812671184539795,OZr,0.5149999856948853,4.106996434082435e6,0.0,0.0 +5.0000364876812794e-5,-1.6310638189315796,OZr,1.5520000457763672,6.239239996605165e6,0.0,0.0 +5.0000364876812794e-5,-2.7930638790130615,OZr,0.859000027179718,429666.63566926285,0.0,0.0 +5.0000364876812794e-5,-1.9808986186981201,OZr,0.6380000114440918,2.7880264629756063e6,0.0,0.0 +5.0000384882128754e-5,-1.3736711740493774,OZr,1.3519999980926514,1.128558272983004e7,0.0,0.0 +5.000039488478674e-5,-1.7896711826324463,OZr,0.42100000381469727,4.330358044865892e6,0.0,0.0 +5.000041288957111e-5,-3.6070001125335693,Ca I,5.045000076293945,1.737799912893992e7,0.000977237242415122,1.3182567385564074e-7 +5.000042489276069e-5,-3.0300638675689697,OZr,0.4020000100135803,248960.58750411638,0.0,0.0 +5.000043489541866e-5,-0.11314371973276138,OV,0.6269999742507935,2.0561300214724758e8,0.0,0.0 +5.000044489807664e-5,-2.315006971359253,OZr,0.4950000047683716,1.2917758136892181e6,0.0,0.0 +5.0000454900734624e-5,-1.9926711320877075,OZr,0.8410000205039978,2.713456191732512e6,0.0,0.0 +5.0000464903392614e-5,-2.4726712703704834,OZr,0.8199999928474426,898509.1462737815,0.0,0.0 +5.0000464903392614e-5,-1.7970068454742432,OZr,0.8949999809265137,4.257816368525702e6,0.0,0.0 +5.00004749060506e-5,-0.046792466193437576,OZr,1.159999966621399,2.395527345168279e8,0.0,0.0 +5.00004749060506e-5,0.4302075207233429,OZr,2.130000114440918,7.184575610401727e8,0.0,0.0 +5.000048490870859e-5,-1.3717925548553467,OZr,1.1859999895095825,1.1334460943534022e7,0.0,0.0 +5.0000514916682523e-5,-2.3127925395965576,OZr,0.5,1.2983756566804931e6,0.0,0.0 +5.00005249193405e-5,-2.178006887435913,OZr,0.5889999866485596,1.7708665829303714e6,0.0,0.0 +5.000055492731445e-5,-0.10614372044801712,OV,0.6269999742507935,2.0895294109204167e8,0.0,0.0 +5.000059493794639e-5,-0.6756712198257446,OZr,0.8399999737739563,5.630154256811676e7,0.0,0.0 +5.000061494326234e-5,-0.21414370834827423,OV,1.6519999504089355,1.6294740851218405e8,0.0,0.0 +5.000061494326234e-5,0.4052075445652008,OZr,1.847000002861023,6.782639126285886e8,0.0,0.0 +5.0000684961868226e-5,-0.10014371573925018,OV,0.6269999742507935,2.1185866640635273e8,0.0,0.0 +5.000082499908001e-5,-0.09414371848106384,OV,0.6269999742507935,2.14804709468959e8,0.0,0.0 +5.000099504426572e-5,-0.3766712248325348,OZr,1.0160000324249268,1.1207618476067963e8,0.0,0.0 +5.000115508679347e-5,0.3982074558734894,OZr,1.6890000104904175,6.674046666899737e8,0.0,0.0 +5.000123010672836e-5,-0.7599999904632568,Ti I,3.111999988555908,9.332538499404743e7,5.495405842387226e-6,2.8840315031266057e-8 +5.000126511603131e-5,0.6833287477493286,OZr,1.3270000219345093,1.2867927921088796e9,0.0,0.0 +5.000144516387505e-5,-0.2391437143087387,OV,1.0130000114440918,1.5382716275842956e8,0.0,0.0 +5.000144516387505e-5,-0.24414370954036713,OV,1.0140000581741333,1.520663194567667e8,0.0,0.0 +5.000144516387505e-5,-0.24914370477199554,OV,1.0140000581741333,1.5032563234258986e8,0.0,0.0 +5.000144516387505e-5,-0.25314369797706604,OV,1.0140000581741333,1.489474409916607e8,0.0,0.0 +5.0001875278168444e-5,-0.07214371860027313,OV,0.5770000219345093,2.259568719628236e8,0.0,0.0 +5.000190528614242e-5,-0.07814371585845947,OV,0.578000009059906,2.22856361372519e8,0.0,0.0 +5.0001935294116384e-5,-0.08514371514320374,OV,0.578000009059906,2.1929287172979665e8,0.0,0.0 +5.0001965302090334e-5,-0.09114371985197067,OV,0.578000009059906,2.1628379878765646e8,0.0,0.0 +5.000230239166451e-5,-3.367000102996826,Cr I,3.5510001182556152,2.137961713919407e7,7.762468779884148e-7,1.6218100973589297e-8 +5.000301558117915e-5,-0.19214370846748352,OV,1.1460000276565552,1.713980023716477e8,0.0,0.0 +5.000330565826088e-5,-0.18914371728897095,OV,1.1460000276565552,1.725840706679576e8,0.0,0.0 +5.000361574065862e-5,-0.1871437132358551,OV,1.1460000276565552,1.7337853383189064e8,0.0,0.0 +5.000384980285564e-5,-2.203000068664551,Sc I,1.9429999589920044,4.7862990313698694e7,5.888436294945623e-6,2.754228703338169e-8 +5.00039158203984e-5,-0.18414370715618134,OV,1.1449999809265137,1.7457824350785074e8,0.0,0.0 +5.0004195894822205e-5,-0.07814371585845947,OV,1.0839999914169312,2.228359444849147e8,0.0,0.0 +5.0004225902796196e-5,-0.07414371520280838,OV,1.0839999914169312,2.2489755050632736e8,0.0,0.0 +5.000426591342816e-5,-0.07014372199773788,OV,1.0839999914169312,2.2697813513781315e8,0.0,0.0 +5.000430592406016e-5,-0.06714371591806412,OV,1.0839999914169312,2.285511098587576e8,0.0,0.0 +5.0005070127131e-5,-1.6399999856948853,Fe I,4.185999870300293,1.0232935315766703e8,2.6302684539632837e-5,2.511886431509582e-8 +5.00063464662916e-5,0.40432876348495483,OZr,1.027999997138977,6.767376982813784e8,0.0,0.0 +5.000651551121181e-5,-1.7760000228881836,Fe I,4.607999801635742,1.5488151224416983e8,4.365156980428764e-5,4.8977881936844667e-8 +5.000819695802221e-5,0.09957212209701538,HMg,0.7919999957084656,3.354529279285882e8,0.0,0.0 +5.000897716534677e-5,0.3199999928474426,Ti I,0.8259999752044678,8.70963704709875e7,8.912505467113453e-7,"(8.904906953142686e-15, 0.24500000000000455)" +5.000907619166104e-5,-1.0390000343322754,V I,2.677999973297119,1.4791086480080837e8,2.187762392612301e-6,2.2908676527677746e-8 +5.0011032711568134e-5,-2.5450000762939453,Cr I,3.321000099182129,1.819701817628807e8,6.025598771719151e-6,2.818382931264455e-8 +5.0011087726187215e-5,-0.00014371545694302768,OV,0.7319999933242798,2.666033125436546e8,0.0,0.0 +5.001134779529561e-5,0.004856284707784653,OV,0.7319999933242798,2.696876286269405e8,0.0,0.0 +5.001161786706205e-5,0.009856284596025944,OV,0.7319999933242798,2.728075176733107e8,0.0,0.0 +5.001189794148651e-5,0.01485628541558981,OV,0.7310000061988831,2.759633894647837e8,0.0,0.0 +5.001382845448442e-5,0.09257210791110992,HMg,0.7440000176429749,3.300150646130076e8,0.0,0.0 +5.001382845448442e-5,-0.0621437132358551,OV,0.8230000138282776,2.3110957768901852e8,0.0,0.0 +5.0013891471229976e-5,-1.5679999589920044,Ti I,3.111999988555908,9.332538499404743e7,2.8840317564502847e-6,2.8840315031266057e-8 +5.001421855814735e-5,-0.057143714278936386,OV,0.8230000138282776,2.3378205293639687e8,0.0,0.0 +5.0014428613965865e-5,-0.20314371585845947,OV,0.5249999761581421,1.6703501424691775e8,0.0,0.0 +5.001445862193993e-5,-0.21114371716976166,OV,0.5249999761581421,1.639860843752068e8,0.0,0.0 +5.0014478627255985e-5,-0.22014370560646057,OV,0.5249999761581421,1.6062260317345285e8,0.0,0.0 +5.001450863523006e-5,-0.22914370894432068,OV,0.5249999761581421,1.5732804124027413e8,0.0,0.0 +5.001462866712637e-5,-0.05214371532201767,OV,0.8220000267028809,2.3648524265527865e8,0.0,0.0 +5.001503877610544e-5,-0.04814371466636658,OV,0.8220000267028809,2.3866949993361706e8,0.0,0.0 +5.001606004749015e-5,-1.1679999828338623,Fe I,4.638000011444092,2.041739917404129e8,4.466836902389504e-5,4.8977881936844667e-8 +5.0016439148229496e-5,0.11257211863994598,HMg,0.703000009059906,3.455321298724953e8,0.0,0.0 +5.0016529172151766e-5,0.11457210779190063,HMg,0.7919999957084656,3.471257754724659e8,0.0,0.0 +5.001737639728714e-5,-0.4300000071525574,Ni I,3.634999990463257,1.819701817628807e8,2.2908683570453766e-5,"(2.321436435268958e-14, 0.27800000000002)" +5.001809958946307e-5,-0.10614372044801712,OV,0.6359999775886536,2.088063795141169e8,0.0,0.0 +5.001823962667558e-5,-0.10014371573925018,OV,0.6359999775886536,2.1170998243569696e8,0.0,0.0 +5.001837966388809e-5,-0.09414371848106384,OV,0.6359999775886536,2.146539583655899e8,0.0,0.0 +5.001841667372283e-5,-0.8790000081062317,Cr I,4.206999778747559,1.1220189470737863e8,6.918312139914402e-7,1.7378008287493763e-8 +5.001850969844258e-5,-0.08714371919631958,OV,0.6349999904632568,2.1814067003174773e8,0.0,0.0 +5.001911986058291e-5,0.09557211399078369,HMg,0.7440000176429749,3.322323210875963e8,0.0,0.0 +5.002385111783885e-5,-0.019999999552965164,Ti I,1.996999979019165,9.120109194638906e7,4.89778883899247e-6,"(2.217825882669499e-14, 0.23099999999999454)" +5.002609171324361e-5,0.16157211363315582,HMg,0.703000009059906,3.8665249880625224e8,0.0,0.0 +5.002684191259822e-5,-0.06614372134208679,OV,0.5870000123977661,2.288716290615988e8,0.0,0.0 +5.002687192057241e-5,-0.07214371860027313,OV,0.5870000123977661,2.2573112320749965e8,0.0,0.0 +5.0026901928546604e-5,-0.07814371585845947,OV,0.5870000123977661,2.2263371040559193e8,0.0,0.0 +5.002694193917886e-5,-0.08514371514320374,OV,0.5870000123977661,2.1907369349403292e8,0.0,0.0 +5.00325864391286e-5,-0.009999999776482582,Fe I,3.881999969482422,1.513562312005786e8,5.12861429039393e-6,"(2.0302067739083166e-14, 0.2400000000000091)" +5.0032603443647344e-5,-1.25600004196167,Fe I,4.548999786376953,1.4454392628956643e8,3.090293803866819e-5,4.78630092322638e-8 +5.003717765919055e-5,-0.07400000095367432,V I,2.3589999675750732,3.090293803866819e7,1.0715198228903989e-6,1.698243652461746e-8 +5.00396493160065e-5,-1.0240000486373901,Ca I,5.048999786376953,9.332538499404743e7,0.0028183832407111167,1.3489628825916533e-7 +5.0039789353219933e-5,-1.1410000324249268,Fe I,4.185999870300293,7.244361827871233e7,7.943284091521297e-6,2.754228703338169e-8 +5.004187790823225e-5,-1.4600000381469727,Fe I,3.3970000743865967,7.943284091521296e7,5.370318199557904e-6,"(2.374641854171383e-14, 0.2319999999999709)" +5.005136542946156e-5,-3.069999933242798,Ni I,1.6759999990463257,1.4125363038976318e8,7.079456289251887e-7,"(6.384650268290983e-15, 0.25499999999999545)" +5.0054396234878444e-5,-1.2999999523162842,Fe I,4.209000110626221,1.0232935315766703e8,9.772367059324806e-5,"(2.5818629593703007e-14, 0.27899999999999636)" +5.005796018197783e-5,-1.2419999837875366,Cr I,3.010999917984009,2.290865841769215e8,3.311311069398671e-5,3.63078054770101e-8 +5.007108567003744e-5,-0.11999999731779099,Fe I,3.884000062942505,1.5488151224416983e8,5.12861429039393e-6,2.691534803926914e-8 +5.007455859296513e-5,-1.2960000038146973,Si I,5.081999778747559,4.07379955757968e8,0.00011220183311090416,7.943282347242822e-8 +5.007457859828155e-5,-0.4059999883174896,Ca I,5.25,1.6595879278457615e8,0.0010232929698100971,1.2022644346174132e-7 +5.007515075033106e-5,-0.6309999823570251,Fe I,2.8329999446868896,1.4791086480080837e8,3.890452816839944e-6,"(1.9966033514436275e-14, 0.2380000000000564)" +5.0086060649657545e-5,0.17000000178813934,Ti I,0.8180000185966492,8.70963704709875e7,8.912505467113453e-7,"(8.876904101088779e-15, 0.2459999999999809)" +5.008671282297498e-5,-0.2029999941587448,Fe I,4.103000164031982,2.951211041237279e8,0.0001096478099832217,3.0199517204020194e-8 +5.0091289039124725e-5,0.30957210063934326,HMg,0.6629999876022339,5.42237491549181e8,0.0,0.0 +5.009595027787611e-5,0.32157209515571594,HMg,0.6629999876022339,5.573252432392265e8,0.0,0.0 +5.010500268362443e-5,0.1850000023841858,Ce I,0.3959999978542328,4.0679881621203643e8,5.868077840633888e-6,0.0 +5.01104211236295e-5,-2.200000047683716,Ti I,0.020999999716877937,7.4131004595831735e6,7.762468779884148e-7,"(7.252738681962124e-15, 0.24200000000001864)" +5.012335856191994e-5,-0.6769999861717224,Ni I,3.634999990463257,1.819701817628807e8,4.265796312095559e-5,"(2.3074350092420043e-14, 0.27800000000002)" +5.013466156587973e-5,-2.6419999599456787,Fe I,0.859000027179718,1.8620870548831206e7,7.079456289251887e-7,"(6.7766901970456915e-15, 0.24600000000000932)" +5.013555180247643e-5,-0.9779999852180481,Fe I,4.190999984741211,2.884031756450285e8,5.754402406055371e-5,3.090295432513592e-8 +5.01383615492197e-5,-0.5299999713897705,Ni I,3.6989998817443848,1.7782794100389227e8,3.467368199963294e-6,"(2.0750113371945694e-14, 0.23699999999996635)" +5.013839155719489e-5,-1.1080000400543213,Fe I,4.14300012588501,6.4565414396650374e7,3.311311069398671e-5,3.0199517204020194e-8 +5.014678378760288e-5,0.11999999731779099,Ti I,2.0169999599456787,9.120109194638906e7,4.89778883899247e-6,2.818382931264455e-8 +5.014711387533092e-5,-0.7699999809265137,Cr I,2.7079999446868896,1.949844428490234e8,9.549926279631118e-7,"(1.0837103744862326e-14, 0.26200000000000045)" +5.015584719641411e-5,-1.2200000286102295,Ti I,0.0,8.511377017774278e6,7.762468779884148e-7,"(7.224735829908217e-15, 0.24200000000001864)" +5.01567484359408e-5,0.03999999910593033,Ti I,0.8130000233650208,8.70963704709875e7,8.912505467113453e-7,"(8.84890124903487e-15, 0.2459999999999809)" +5.016341220701017e-5,-0.18299999833106995,Fe I,3.943000078201294,1.4791086480080837e8,2.6915337400578163e-6,"(2.055409340756834e-14, 0.23900000000003274)" +5.017560044638428e-5,-0.47999998927116394,Ti I,0.8479999899864197,8.70963704709875e7,8.912505467113453e-7,"(8.960912657250501e-15, 0.24500000000000455)" +5.01896751872057e-5,-0.019999999552965164,Ni I,3.5390000343322754,1.3182563911826833e8,3.6307800693276413e-6,"(1.9377973621304212e-14, 0.23699999999996635)" diff --git a/src/linelist.jl b/src/linelist.jl index af70a19f..8563e3b3 100644 --- a/src/linelist.jl +++ b/src/linelist.jl @@ -46,7 +46,7 @@ struct Line{F1, F2, F3, F4, F5, F6} if wl >= 1 wl *= 1e-8 #convert Å to cm end - if ismissing(gamma_stark) || isnan(gamma_stark) || ismissing(vdW) || isnan(vdW) + if ismissing(gamma_stark) || isnan(gamma_stark) || ismissing(vdW) || (!(vdW isa Tuple) && isnan(vdW)) gamma_stark_approx, vdW_approx = approximate_gammas(wl, species, E_lower) if ismissing(gamma_stark) || isnan(gamma_stark) gamma_stark = gamma_stark_approx @@ -61,7 +61,7 @@ struct Line{F1, F2, F3, F4, F5, F6} # if vdW is a tuple, assume it's (σ, α) from ABO theory # if it's a float, there are four possibilities - if !ismissing(vdW) && !isnan(vdW) && !(vdW isa Tuple) #F6 will not be defined if vdW is missing + if !ismissing(vdW) && !(vdW isa Tuple) !isnan(vdW) #F6 will not be defined if vdW is missing if vdW < 0 vdW = 10^vdW # if vdW is negative, assume it's log(γ_vdW) elseif vdW == 0 @@ -630,4 +630,21 @@ function get_GES_linelist() tentotheOrMissing.(Float64.(read(f["gamma_stark"]))), read(f["vdW"])) end -end \ No newline at end of file +end + +""" +TODO +""" +function _load_alpha_5000_linelist(path=joinpath(_data_dir, "linelists", "alpha_5000", "alpha_5000_lines.csv")) + csv = CSV.File(path) + map(csv) do row + vdW = if ',' in row.vdW + σ, α = split(row.vdW[2:end-1], ',') + (parse(Float64, σ), parse(Float64, α)) + else + parse(Float64, row.vdW) + end + Line(row.wl, row.log_gf, Species(row.species), row.E_lower, row.gamma_rad, row.gamma_stark, vdW) + end +end +const _alpha_5000_default_linelist = _load_alpha_5000_linelist() \ No newline at end of file From bb1b4e391c78394882193b68962a0f311df9d7dd Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 10 Jul 2024 14:52:40 -0400 Subject: [PATCH 10/22] add notebook which created alpha 5000 linelist --- .../Calculate minimal 5000A linelist.ipynb | 525 ++++++++++++++++++ 1 file changed, 525 insertions(+) create mode 100644 data/linelists/alpha_5000/Calculate minimal 5000A linelist.ipynb diff --git a/data/linelists/alpha_5000/Calculate minimal 5000A linelist.ipynb b/data/linelists/alpha_5000/Calculate minimal 5000A linelist.ipynb new file mode 100644 index 00000000..648891ea --- /dev/null +++ b/data/linelists/alpha_5000/Calculate minimal 5000A linelist.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "2abac3c2-83f5-4686-a767-90498f9630c6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T09:59:49.895", + "iopub.status.busy": "2024-07-10T09:59:49.665", + "iopub.status.idle": "2024-07-10T10:01:12.548", + "shell.execute_reply": "2024-07-10T10:01:12.419" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m\u001b[1mPrecompiling\u001b[22m\u001b[39m Korg\n", + "\u001b[32m ✓ \u001b[39mKorg\n", + " 1 dependency successfully precompiled in 62 seconds. 141 already precompiled.\n" + ] + } + ], + "source": [ + "using PyPlot, Revise, Korg, BenchmarkTools, ProgressMeter" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e8d3f4c2-dea5-46d0-9cee-5f6154e0af28", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:01:12.696", + "iopub.status.busy": "2024-07-10T10:01:12.607", + "iopub.status.idle": "2024-07-10T10:01:42.834", + "shell.execute_reply": "2024-07-10T10:01:42.833" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mThis function is may fail on some systems. See https://github.com/ajwheeler/Korg.jl/issues/309 for details.\n", + "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ Korg ~/Dropbox/Korg/src/linelist.jl:619\u001b[39m\n" + ] + } + ], + "source": [ + "geslines = Korg.get_GES_linelist();" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f77e26f2-7a07-4a29-a84d-b22ec684296d", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:03:51.625", + "iopub.status.busy": "2024-07-10T10:03:51.624", + "iopub.status.idle": "2024-07-10T10:03:51.925", + "shell.execute_reply": "2024-07-10T10:03:51.925" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "274383" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alllines = filter(geslines) do line\n", + " 4980 < line.wl*1e8 < 5020\n", + "end\n", + "length(alllines)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e0eea3f3-0ab9-4024-a253-015ec07f3395", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:03:53.220", + "iopub.status.busy": "2024-07-10T10:03:53.220", + "iopub.status.idle": "2024-07-10T10:03:53.239", + "shell.execute_reply": "2024-07-10T10:03:53.238" + } + }, + "outputs": [], + "source": [ + "A_X = format_A_X()\n", + "atm = interpolate_marcs(3000, 4.5, A_X)\n", + ";" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "25e70306-ae0e-412d-8285-5e3c8f17f8b2", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:03:53.607", + "iopub.status.busy": "2024-07-10T10:03:53.606", + "iopub.status.idle": "2024-07-10T10:03:54.005", + "shell.execute_reply": "2024-07-10T10:03:54.004" + } + }, + "outputs": [], + "source": [ + "cntmsol = synthesize(atm, [], A_X, 5000, 5000)\n", + "α_cntm = [_->a for a in copy(cntmsol.alpha)] # lambda per layer\n", + "n_dicts = [Dict(k => cntmsol.number_densities[k][i] for k in keys(cntmsol.number_densities)) for i in 1:56]\n", + ";" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "888bc80c-dad2-4ace-95bb-db14e5aa9c46", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:03:54.075", + "iopub.status.busy": "2024-07-10T10:03:54.075", + "iopub.status.idle": "2024-07-10T10:04:03.735", + "shell.execute_reply": "2024-07-10T10:04:03.735" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:09\u001b[39m\n" + ] + } + ], + "source": [ + "max_alpha_ratio = @showprogress map(alllines) do line\n", + " α = zeros(size(cntmsol.alpha))\n", + " \n", + " Korg.line_absorption!(α, [line], [5e-5:1e-10:5e-5], Korg.get_temps(atm), \n", + " cntmsol.electron_number_density, cntmsol.number_densities,\n", + " Korg.default_partition_funcs, 1e5, α_cntm, cutoff_threshold=1e-30)\n", + " maximum(α ./ cntmsol.alpha)\n", + "end\n", + ";" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "c66c5e1d-e358-489a-b17f-38c8271f1888", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:04:03.735", + "iopub.status.busy": "2024-07-10T10:04:03.735", + "iopub.status.idle": "2024-07-10T10:04:03.873", + "shell.execute_reply": "2024-07-10T10:04:03.873" + } + }, + "outputs": [ + { + "data": { + "image/png": "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3r59u23bU/seEJ3Tp0/bOTk59rPPPnvefej3mbVt2zb7i1/8ov3222/bkuw9e/ZEtj311FP24sWLJ/Xzz372M3vFihVxqHTuevLJJ+0rr7wysky/z4zS0lK7rq4ushwOh+3s7Gy7ubl51mtxxJmT/6Wnp0fXXXedMjMzI+sqKysVCoX09ttvR/bx+XyT3ldZWamenp5ZrdWplixZohUrVuj555/X6Oiozpw5o6efflpLly5VUVGRpKl9D4hOX1+fjhw5osTERH3pS1/SsmXLVFVVpX379kX2od9nTjAYVG1trX73u98pJSXlrO09PT366le/quTk5Mi6yspKHTx4UB9++OFsljqnDQ8PKz09PbJMv8fe+Pi4ent7J/1OJiYmyufzxeV3ck6Ek0AgMOkPs6TI8qeXHM63TygU0r///e/ZKdTBEhIS9Oqrr2rPnj1auHCh5s+fr40bN6qzs1OLFy+WNLXvAdF59913JUmPPPKIfvGLX+jll1/W4sWLddNNN+nkyZOS6PeZYtu21q9frx/96EcqLi4+5z70/cw7dOiQNm3apB/+8IeRdfR77J04cULhcPic/RqPPo1bOKmvr1dCQsIFXwcOHIhXea4x1e/Btm3V1dVp6dKlev3117Vz506tWbNGq1ev1rFjx+L9MRxnqv0+MTEhSXr44Yf17W9/W0VFRdqyZYsSEhL04osvxvlTONNU+37Tpk06deqUGhoa4l3ynHAxf/OPHDmib37zm7rjjjtUW1sbp8oRD/PideD7779f69evv+A+y5cvn1JbWVlZZ40oDgaDkW2f/vfTdf+5T2pqqhYsWDDFqueeqX4Pr732ml5++WV9+OGHkcdoP/XUU9q+fbuee+451dfXT+l7wCem2u+fBr+CgoLIeo/Ho+XLl+v999+XNLV///hMNP/me3p6znrGSHFxsb73ve/pueeeO+/fFYm+/2/R/s0/evSoKioqdOONN5410JV+j72MjAwlJSWds1/j0adxCyeXXXaZLrvsspi0VV5erscff1zHjx/X0qVLJUnbt29Xampq5I96eXm5tm3bNul927dvV3l5eUxqcKqpfg8ff/yxpE+uQf6nxMTEyP/dT+V7wCem2u9FRUXyeDw6ePCgVq5cKUk6ffq0Dh8+rCuuuEIS/R6tqfb9r3/9az322GOR5aNHj6qyslLt7e0qKyuT9EnfP/zwwzp9+rQuueQSSZ/0/YoVKyKXO/GJaP7mHzlyRBUVFZEzhf/9d4d+j73k5GQVFRWpq6srcquCiYkJdXV16d577539gmZ9CO5FeO+99+w9e/bYjz76qH3ppZfae/bssffs2WOfOnXKtm3bPnPmjH3ttdfaN998s93f3293dnbal112md3Q0BBp491337VTUlLsBx980P7nP/9pW5ZlJyUl2Z2dnfH6WI4yNDRkL1myxL799tvt/v5+++DBg/YDDzxgX3LJJXZ/f79t21P7HhC9++67z87JybFfeeUV+8CBA/bdd99tL1261D558qRt2/T7bBkYGDhrts5HH31kZ2Zm2nfeeae9b98++4UXXrBTUlLsp59+On6FOtwHH3xgX3XVVfY3vvEN+4MPPrCPHTsWeX2Kfp8ZL7zwgu3xeOy2tjZ7//799j333GMvWrRo0kzA2eKIcFJdXW1LOuu1Y8eOyD6HDx+2q6qq7AULFtgZGRn2/fffb58+fXpSOzt27LALCwvt5ORke/ny5faWLVtm94M43K5du+ybb77ZTk9PtxcuXGjfcMMN9rZt2ybtM5XvAdEZHx+377//fnvp0qX2woULbZ/PZ+/bt2/SPvT7zDtXOLFt2967d6+9cuVK2+Px2Dk5OfYTTzwRnwLniC1btpzz7/1//780/T4zNm3aZOfl5dnJycl2aWmp/dZbb8WljgTbtu3ZP18DAABwbnNiKjEAAJg7CCcAAMAohBMAAGAUwgkAADAK4QQAABiFcAIAAIxCOAEAAEYhnAAAAKMQTgAAgFEIJwAAwCiEEwAAYBTCCQAAMMr/A6QS4ReUbj9kAAAAAElFTkSuQmCC", + "text/plain": [ + "Figure(PyObject
)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist(log10.(max_alpha_ratio), bins=30)\n", + "yscale(\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9ed10488-1d1a-487b-a46b-9a9af3cf57b5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:04:03.887", + "iopub.status.busy": "2024-07-10T10:04:03.887", + "iopub.status.idle": "2024-07-10T10:04:04.089", + "shell.execute_reply": "2024-07-10T10:04:04.089" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "409-element Vector{Korg.Line{Float64, Float64, Float64, Float64, Float64, Float64}}:\n", + " Fe I 4980.080886 Å (log gf = -0.95)\n", + " Ni I 4981.555577 Å (log gf = 0.07)\n", + " Ti I 4983.120493 Å (log gf = 0.57)\n", + " Fe I 4983.889597 Å (log gf = 0.16)\n", + " Na I 4984.204281 Å (log gf = -0.92)\n", + " Fe I 4984.640797 Å (log gf = -0.12)\n", + " Fe I 4985.243157 Å (log gf = -0.01)\n", + " Ni I 4985.506927 Å (log gf = 0.31)\n", + " Fe I 4986.643729 Å (log gf = -0.45)\n", + " Fe I 4986.937707 Å (log gf = -1.33)\n", + " Fe I 4987.613787 Å (log gf = -1.29)\n", + " Nd I 4990.031829 Å (log gf = -0.03)\n", + " Fe I 4990.341712 Å (log gf = -0.89)\n", + " ⋮\n", + " Ni I 5012.335856 Å (log gf = -0.68)\n", + " Fe I 5013.466157 Å (log gf = -2.64)\n", + " Fe I 5013.55518 Å (log gf = -0.98)\n", + " Ni I 5013.836155 Å (log gf = -0.53)\n", + " Fe I 5013.839156 Å (log gf = -1.11)\n", + " Ti I 5014.678379 Å (log gf = 0.12)\n", + " Cr I 5014.711388 Å (log gf = -0.77)\n", + " Ti I 5015.58472 Å (log gf = -1.22)\n", + " Ti I 5015.674844 Å (log gf = 0.04)\n", + " Fe I 5016.341221 Å (log gf = -0.18)\n", + " Ti I 5017.560045 Å (log gf = -0.48)\n", + " Ni I 5018.967519 Å (log gf = -0.02)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fewerlines = alllines[max_alpha_ratio .> 1e-5]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5cd4b9a2-1730-45f2-b720-4b495a8fe715", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:04:48.161", + "iopub.status.busy": "2024-07-10T10:04:48.161", + "iopub.status.idle": "2024-07-10T10:04:48.385", + "shell.execute_reply": "2024-07-10T10:04:48.385" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "19-element Vector{Korg.Species}:\n", + " Fe I\n", + " Ni I\n", + " Ti I\n", + " Na I\n", + " Nd I\n", + " Ca I\n", + " HMg\n", + " Ce I\n", + " OV\n", + " OZr\n", + " Mn I\n", + " HSi\n", + " Nd II\n", + " Cr I\n", + " OTi\n", + " CN\n", + " Sc I\n", + " V I\n", + " Si I" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique(line.species for line in fewerlines)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "92eaf2ea-5662-4a37-8663-d666eb015e62", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:07:16.196", + "iopub.status.busy": "2024-07-10T10:07:16.196", + "iopub.status.idle": "2024-07-10T10:07:57.168", + "shell.execute_reply": "2024-07-10T10:07:57.168" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 570.051 ms (1189632 allocations: 455.80 MiB)\n", + " 275.157 ms (784570 allocations: 411.18 MiB)\n", + " 272.153 ms (783340 allocations: 411.04 MiB)\n" + ] + } + ], + "source": [ + "@btime solall = synthesize(atm, alllines, A_X, 5000, 5000)\n", + "@btime solfewer = synthesize(atm, fewerlines, A_X, 5000, 5000)\n", + "@btime synthesize(atm, [], A_X, 5000, 5000)\n", + ";" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "f875f6b5-f3e3-4636-a49d-c19d8b0e780b", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:04:05.334", + "iopub.status.busy": "2024-07-10T10:04:05.334", + "iopub.status.idle": "2024-07-10T10:04:05.348", + "shell.execute_reply": "2024-07-10T10:04:05.347" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1×2 Matrix{Float64}:\n", + " 0.808612 0.808632" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[solall.flux/solall.cntm solfewer.flux./solfewer.cntm]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3258538f-26dd-46c0-860d-9de82e0fabbb", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T10:04:05.348", + "iopub.status.busy": "2024-07-10T10:04:05.348", + "iopub.status.idle": "2024-07-10T10:04:05.361", + "shell.execute_reply": "2024-07-10T10:04:05.361" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1×2 Matrix{Float64}:\n", + " 1.43755e13 1.43759e13" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[solall.flux solfewer.flux]" + ] + }, + { + "cell_type": "markdown", + "id": "5123da19-057d-4525-b4fc-d21243b7b4bc", + "metadata": {}, + "source": [ + "# save lines" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "2cfcef83-3d3b-449b-95cc-8193a584ee1f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T13:49:53.613", + "iopub.status.busy": "2024-07-10T13:49:53.613", + "iopub.status.idle": "2024-07-10T13:49:54.483", + "shell.execute_reply": "2024-07-10T13:49:54.483" + } + }, + "outputs": [], + "source": [ + "using CSV, DataFrames" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "661a4c72-1876-471e-b092-35b7bfd8a99e", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T14:19:33.135", + "iopub.status.busy": "2024-07-10T14:19:33.135", + "iopub.status.idle": "2024-07-10T14:19:33.257", + "shell.execute_reply": "2024-07-10T14:19:33.257" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"alpha_5000_lines.csv\"" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(\n", + " wl=[line.wl for line in fewerlines],\n", + " log_gf=[line.log_gf for line in fewerlines],\n", + " species=[string(line.species) for line in fewerlines],\n", + " E_lower=[line.E_lower for line in fewerlines],\n", + " gamma_rad=[line.gamma_rad for line in fewerlines],\n", + " gamma_stark=[line.gamma_stark for line in fewerlines],\n", + " vdW=[line.vdW for line in fewerlines]\n", + " )\n", + " \n", + "CSV.write(\"alpha_5000_lines.csv\", df)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "9af819a1-6da8-420a-8c37-f1eb24933319", + "metadata": { + "execution": { + "iopub.execute_input": "2024-07-10T14:47:23.824", + "iopub.status.busy": "2024-07-10T14:47:23.820", + "iopub.status.idle": "2024-07-10T14:47:35.338", + "shell.execute_reply": "2024-07-10T14:47:35.338" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1.121 ms (16186 allocations: 794.00 KiB)\n" + ] + }, + { + "data": { + "text/plain": [ + "409-element Vector{Korg.Line{Float64, Float64, Float64, Float64, Float64, Float64}}:\n", + " Fe I 4980.080886 Å (log gf = -0.95)\n", + " Ni I 4981.555577 Å (log gf = 0.07)\n", + " Ti I 4983.120493 Å (log gf = 0.57)\n", + " Fe I 4983.889597 Å (log gf = 0.16)\n", + " Na I 4984.204281 Å (log gf = -0.92)\n", + " Fe I 4984.640797 Å (log gf = -0.12)\n", + " Fe I 4985.243157 Å (log gf = -0.01)\n", + " Ni I 4985.506927 Å (log gf = 0.31)\n", + " Fe I 4986.643729 Å (log gf = -0.45)\n", + " Fe I 4986.937707 Å (log gf = -1.33)\n", + " Fe I 4987.613787 Å (log gf = -1.29)\n", + " Nd I 4990.031829 Å (log gf = -0.03)\n", + " Fe I 4990.341712 Å (log gf = -0.89)\n", + " ⋮\n", + " Ni I 5012.335856 Å (log gf = -0.68)\n", + " Fe I 5013.466157 Å (log gf = -2.64)\n", + " Fe I 5013.55518 Å (log gf = -0.98)\n", + " Ni I 5013.836155 Å (log gf = -0.53)\n", + " Fe I 5013.839156 Å (log gf = -1.11)\n", + " Ti I 5014.678379 Å (log gf = 0.12)\n", + " Cr I 5014.711388 Å (log gf = -0.77)\n", + " Ti I 5015.58472 Å (log gf = -1.22)\n", + " Ti I 5015.674844 Å (log gf = 0.04)\n", + " Fe I 5016.341221 Å (log gf = -0.18)\n", + " Ti I 5017.560045 Å (log gf = -0.48)\n", + " Ni I 5018.967519 Å (log gf = -0.02)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "@btime Korg._load_alpha_5000_linelist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a29980de-909a-41d0-8efd-7b5de870c026", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.10.3", + "language": "julia", + "name": "julia-1.10" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 28976989d9a8cec3a117a9de6d76d908fdcae5be Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 10 Jul 2024 15:55:16 -0400 Subject: [PATCH 11/22] reorder includes so that ionization energies are defined when needed --- src/Korg.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Korg.jl b/src/Korg.jl index 757824b1..ec227fbb 100644 --- a/src/Korg.jl +++ b/src/Korg.jl @@ -7,11 +7,11 @@ module Korg include("atomic_data.jl") # symbols and atomic weights include("isotopic_data.jl") # abundances and nuclear spins include("species.jl") # types for chemical formulae and species + include("read_statmech_quantities.jl") # approximate Us, Ks, chis include("linelist.jl") # parse linelists, define Line type include("line_absorption.jl") # opacity, line profile, voigt function include("hydrogen_line_absorption.jl") # hydrogen lines get special treatment include("autodiffable_conv.jl") # wrap DSP.conv to be autodiffable - include("read_statmech_quantities.jl") # approximate Us, Ks, chis include("statmech.jl") # statistical mechanics, molecular equilibrium include("atmosphere.jl") # parse model atmospheres include("RadiativeTransfer/RadiativeTransfer.jl") # radiative transfer formal solution From c763d6edcef0b7996d81da4ecf7526e029aeb298 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Wed, 10 Jul 2024 17:10:27 -0400 Subject: [PATCH 12/22] use default alpha 5000 region linelist if the provided one doesn't cover that region --- src/synthesize.jl | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 227aaf2a..96d481e2 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -152,9 +152,9 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # frequencies at which to calculate the continuum, as a single vector sorted_cntmνs = c_cgs ./ reverse(cntmλs) - # sort linelist and remove lines far from the synthesis region - # first just the ones needed for α5 - linelist5 = filter_linelist(linelist, 5e-5:5e-5, line_buffer; warn_empty=false) + # sort linelist and remove lines far from the synthesis region + # first just the ones needed for α5 (fall back to default if they aren't provided) + linelist5 = get_alpha_5000_linelist(linelist, line_buffer) # now the ones for the synthesis linelist = filter_linelist(linelist, wl_ranges, line_buffer) @@ -302,6 +302,30 @@ function filter_linelist(linelist, wl_ranges, line_buffer; warn_empty=true) linelist end +""" + get_alpha_5000_linelist(linelist, line_buffer) + +Return a linelist which can be used to calculate the absorption at 5000 Å, which is required for +the standard radiative transfer scheme. If the provided linelist doesn't contain lines near 5000 Å, +use the built-in one. (see [`_load_alpha_5000_linelist`](@ref)) +""" +function get_alpha_5000_linelist(linelist, line_buffer) + # start by getting the lines in the provided linelist which effect the synthesis at 5000 Å + linelist5 = filter_linelist(linelist, [5e-5:1:5e-5], line_buffer; warn_empty=false) + # if there aren't any, use the built-in one + if length(linelist5) == 0 + _alpha_5000_default_linelist + # if there are some, but they don't actually cross over 5000 Å, use the built-in one where they + # aren't present + elseif (linelist5[1].wl > 5e-5) || (linelist5[end].wl < 5e-5) + filter(_alpha_5000_default_linelist) do line + (line.wl < linelist5[1].wl) || (line.wl > linelist5[end].wl) + end + else # if the built-in lines span 5000 Å, use them + linelist5 + end +end + """ format_A_X(default_metals_H, default_alpha_H, abundances; kwargs... ) From e441fb216a66ac3449a15b15d013441dba255add Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 10:21:48 -0400 Subject: [PATCH 13/22] update Q factor test for more accurate spectra and lower the tolerance to something reasonable. --- test/qfactors.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/qfactors.jl b/test/qfactors.jl index 7e55303e..96f2320a 100644 --- a/test/qfactors.jl +++ b/test/qfactors.jl @@ -35,7 +35,7 @@ msk[1:100] .= false Q = Korg.Qfactor(synth_flux, synth_wls, apowls, LSF_model; obs_mask=msk) - @test Q ≈ 812.2698584824295 + @test Q ≈ 810.9267657701387 rtol=1e-4 SNR = flux ./ obs_err RMS_SNR = sqrt(mean(SNR[msk].^2)) Q_prec = Korg.RV_prec_from_Q(Q, RMS_SNR, count(msk)) From 20dca513ba52d9a9af7a8562d23a5636408a159b Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 10:36:31 -0400 Subject: [PATCH 14/22] don't construct alpha 5000 linelist if you don't need it --- src/synthesize.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 96d481e2..717c7891 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -154,7 +154,9 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # sort linelist and remove lines far from the synthesis region # first just the ones needed for α5 (fall back to default if they aren't provided) - linelist5 = get_alpha_5000_linelist(linelist, line_buffer) + if !bezier_radiative_transfer + linelist5 = get_alpha_5000_linelist(linelist, line_buffer) + end # now the ones for the synthesis linelist = filter_linelist(linelist, wl_ranges, line_buffer) From d7806e1b8c9136242b97852f10778465c343b4de Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 10:44:16 -0400 Subject: [PATCH 15/22] drop unnecessary argument, improve docstring --- src/synthesize.jl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 717c7891..8036bf86 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -155,7 +155,7 @@ function synthesize(atm::ModelAtmosphere, linelist, A_X::AbstractVector{<:Real}, # sort linelist and remove lines far from the synthesis region # first just the ones needed for α5 (fall back to default if they aren't provided) if !bezier_radiative_transfer - linelist5 = get_alpha_5000_linelist(linelist, line_buffer) + linelist5 = get_alpha_5000_linelist(linelist) end # now the ones for the synthesis linelist = filter_linelist(linelist, wl_ranges, line_buffer) @@ -305,15 +305,19 @@ function filter_linelist(linelist, wl_ranges, line_buffer; warn_empty=true) end """ - get_alpha_5000_linelist(linelist, line_buffer) + get_alpha_5000_linelist(linelist) + +Arguments: +- `linelist`: the synthesis linelist, which will be used if it covers the 5000 Å region. Return a linelist which can be used to calculate the absorption at 5000 Å, which is required for the standard radiative transfer scheme. If the provided linelist doesn't contain lines near 5000 Å, use the built-in one. (see [`_load_alpha_5000_linelist`](@ref)) """ -function get_alpha_5000_linelist(linelist, line_buffer) +function get_alpha_5000_linelist(linelist) # start by getting the lines in the provided linelist which effect the synthesis at 5000 Å - linelist5 = filter_linelist(linelist, [5e-5:1:5e-5], line_buffer; warn_empty=false) + # use a 20 Å line buffer, which is the coverage of the fallback linelist is. + linelist5 = filter_linelist(linelist, [5e-5:1:5e-5], 20e-8; warn_empty=false) # if there aren't any, use the built-in one if length(linelist5) == 0 _alpha_5000_default_linelist From ad98d46e76a728b94669e4513e86db4209c5817f Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 13:41:37 -0400 Subject: [PATCH 16/22] treat Lines like scalars when broadcasting --- src/linelist.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/linelist.jl b/src/linelist.jl index 8563e3b3..ff5d557b 100644 --- a/src/linelist.jl +++ b/src/linelist.jl @@ -83,6 +83,9 @@ function Base.show(io::IO, ::MIME"text/plain", line::Line) print(io, " ", round(line.wl*1e8, digits=6), " Å (log gf = ", round(line.log_gf, digits=2) ,")") end +# make it broadcast like a scalar +Base.broadcastable(l::Line) = Ref(l) + """ approximate_radiative_gamma(wl, log_gf) From 24e7dc57e9fdc7f7e14bad4652e12564d41d671b Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 13:42:56 -0400 Subject: [PATCH 17/22] tweak linelist5 construction and fix bug arising from partial overlap --- src/synthesize.jl | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 8036bf86..6f4aa783 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -316,17 +316,23 @@ use the built-in one. (see [`_load_alpha_5000_linelist`](@ref)) """ function get_alpha_5000_linelist(linelist) # start by getting the lines in the provided linelist which effect the synthesis at 5000 Å - # use a 20 Å line buffer, which is the coverage of the fallback linelist is. - linelist5 = filter_linelist(linelist, [5e-5:1:5e-5], 20e-8; warn_empty=false) + # use a 21 Å line buffer, which 1 Å bigger than the coverage of the fallback linelist. + linelist5 = filter_linelist(linelist, [5e-5:1:5e-5], 21e-8; warn_empty=false) # if there aren't any, use the built-in one if length(linelist5) == 0 _alpha_5000_default_linelist # if there are some, but they don't actually cross over 5000 Å, use the built-in one where they # aren't present - elseif (linelist5[1].wl > 5e-5) || (linelist5[end].wl < 5e-5) - filter(_alpha_5000_default_linelist) do line - (line.wl < linelist5[1].wl) || (line.wl > linelist5[end].wl) + elseif linelist5[1].wl > 5e-5 + ll = filter(_alpha_5000_default_linelist) do line + line.wl < linelist5[1].wl end + [ll ; linelist5] + elseif linelist5[end].wl < 5e-5 + ll = filter(_alpha_5000_default_linelist) do line + line.wl > linelist5[end].wl + end + [linelist5 ; ll] else # if the built-in lines span 5000 Å, use them linelist5 end From 268755955f02a886c47e68989fb400ec8ec7f439 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Fri, 12 Jul 2024 13:43:25 -0400 Subject: [PATCH 18/22] test new code and tweak old test to avoid 5000 subtlety --- test/synthesize.jl | 53 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/test/synthesize.jl b/test/synthesize.jl index 4d31f7fc..0c184c0d 100644 --- a/test/synthesize.jl +++ b/test/synthesize.jl @@ -1,15 +1,15 @@ @testset "synthesize" begin @testset "line buffer" begin - #strong line at 4999 Å - line1 = Korg.Line(4999e-8, 1.0, Korg.species"Na I", 0.0) - #strong line at 4997 Å - line2 = Korg.Line(4997e-8, 1.0, Korg.species"Na I", 0.0) + # strong line at 5999 Å + line1 = Korg.Line(5999e-8, 1.0, Korg.species"Na I", 0.0) + # strong line at 5997 Å + line2 = Korg.Line(5997e-8, 1.0, Korg.species"Na I", 0.0) atm = read_model_atmosphere("data/sun.mod") - #use a 2 Å line buffer so only line1 in included - sol_no_lines = synthesize(atm, [], format_A_X(), 5000, 5000; line_buffer=2.0) #synthesize at 5000 Å only - sol_one_lines = synthesize(atm, [line1], format_A_X(), 5000, 5000; line_buffer=2.0) - sol_two_lines = synthesize(atm, [line1, line2], format_A_X(), 5000, 5000; line_buffer=2.0) + # use a 2 Å line buffer so only line1 in included + sol_no_lines = synthesize(atm, [], format_A_X(), 6000, 6000; line_buffer=2.0) #synthesize at 6000 Å only + sol_one_lines = synthesize(atm, [line1], format_A_X(), 6000, 6000; line_buffer=2.0) + sol_two_lines = synthesize(atm, [line1, line2], format_A_X(), 6000, 6000; line_buffer=2.0) @test sol_no_lines.flux != sol_one_lines.flux @test sol_two_lines.flux == sol_one_lines.flux @@ -129,4 +129,41 @@ @test length(Korg.filter_linelist(linelist, wlr, b)) == length(naive_filter(linelist, wlr, b)) end end + + @testset "α(5000 Å) linelist" begin + # test automatic construction of a linelist at 5000 Å for the calculation of α(5000 Å), + # which is used by the default RT scheme + + # synthesis linelist + ll = filter(Korg.get_VALD_solar_linelist()) do line + 4980 < line.wl*1e8 < 5100 + end + + # if there's full coverage, don't insert anything + @test issubset(Korg.get_alpha_5000_linelist(ll), ll) + + #if there's no coverage, use the fallback linelist + @test Korg.get_alpha_5000_linelist([]) == Korg._alpha_5000_default_linelist + + # if there's partial coverage, insert the fallback linelist where needed + small_ll = filter(ll) do line + line.wl*1e8 > 5000 + end + ll5 = Korg.get_alpha_5000_linelist(small_ll) + @test issorted([line.wl for line in ll5]) + # test that it transitions between the two linelists correctly + i = findfirst(ll5 .== small_ll[1]) + @test issubset(ll5[1:i-1], Korg._alpha_5000_default_linelist) + @test issubset(ll5[i:end], small_ll) + + small_ll = filter(ll) do line + line.wl*1e8 < 4995 + end + ll5 = Korg.get_alpha_5000_linelist(small_ll) + @test issorted([line.wl for line in ll5]) + # test that it transitions between the two linelists correctly' + i = findfirst(ll5 .== small_ll[end]) + @test issubset(ll5[1:i], small_ll) + @test issubset(ll5[i+1:end], Korg._alpha_5000_default_linelist) + end end \ No newline at end of file From 9f2a8a51371b54039f4a1f1d1ae8bd18ba1a0b70 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Mon, 15 Jul 2024 10:16:23 -0400 Subject: [PATCH 19/22] fill in docstring --- src/linelist.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/linelist.jl b/src/linelist.jl index ff5d557b..90929d6a 100644 --- a/src/linelist.jl +++ b/src/linelist.jl @@ -636,7 +636,11 @@ function get_GES_linelist() end """ -TODO + _load_alpha_5000_linelist([path]) + +Load the default linelist for calculating the absorption coefficient at 5000 Å. This for internal +use when the provided linelist doesn't cover the region and a radiative transfer scheme using +τ_5000 is used. """ function _load_alpha_5000_linelist(path=joinpath(_data_dir, "linelists", "alpha_5000", "alpha_5000_lines.csv")) csv = CSV.File(path) From 299c9a00625cabead7dab4ecb2a062580546bc37 Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Mon, 15 Jul 2024 10:20:07 -0400 Subject: [PATCH 20/22] another docstring --- src/linelist.jl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/linelist.jl b/src/linelist.jl index 90929d6a..85f5361b 100644 --- a/src/linelist.jl +++ b/src/linelist.jl @@ -641,6 +641,8 @@ end Load the default linelist for calculating the absorption coefficient at 5000 Å. This for internal use when the provided linelist doesn't cover the region and a radiative transfer scheme using τ_5000 is used. + +This linelist loaded into `Korg._alpha_5000_default_linelist` when Korg is imported. """ function _load_alpha_5000_linelist(path=joinpath(_data_dir, "linelists", "alpha_5000", "alpha_5000_lines.csv")) csv = CSV.File(path) @@ -654,4 +656,12 @@ function _load_alpha_5000_linelist(path=joinpath(_data_dir, "linelists", "alpha_ Line(row.wl, row.log_gf, Species(row.species), row.E_lower, row.gamma_rad, row.gamma_stark, vdW) end end + +""" +The default linelist for calculating the absorption coefficient at 5000 Å. This for internal +use when the provided linelist doesn't cover the region and a radiative transfer scheme using +τ_5000 is used. + +See also [`_load_alpha_5000_linelist`](@ref). +""" const _alpha_5000_default_linelist = _load_alpha_5000_linelist() \ No newline at end of file From 7ded78ab02403bac4b0ad5b73ee9af57b414cd7b Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Mon, 15 Jul 2024 10:24:53 -0400 Subject: [PATCH 21/22] update documentation to reflect that wavelengths no longer have to match exactly --- src/molecular_cross_sections.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/molecular_cross_sections.jl b/src/molecular_cross_sections.jl index 07aea52a..8393e1b3 100644 --- a/src/molecular_cross_sections.jl +++ b/src/molecular_cross_sections.jl @@ -2,7 +2,7 @@ using Interpolations: interpolate!, Gridded, Linear, extrapolate using HDF5 struct MolecularCrossSection - wls # just for debugging + wls itp species :: Korg.Species end @@ -13,13 +13,13 @@ end Precompute the molecular absorption cross section for a given linelist and set of wavelengths. The `MolecularCrossSection` object can be passed to [`synthesize`](@ref) and potentially speed up the calculation significantly. At present, Korg only supports precomputed cross-sections created by -this function. +this function, though they can be saved and loaded using [`save_molecular_cross_section`](@ref) and +[`read_molecular_cross_section`](@ref). # Arguments - `linelist`: A vector of `Line` objects representing the molecular linelist. These must be of the same species. -- `wls`: A vector of wavelength ranges (in Å) at which to precompute the cross section. *These must - match the wavelengths used for any subsequent synthesis exactly*. +- `wls`: A vector of wavelength ranges (in Å) at which to precompute the cross section. # Keyword Arguments - `cutoff_alpha` (default: 1e-30): The value of the single-line absorption coefficient (in cm^-1) at @@ -71,7 +71,7 @@ end """ - interpolate_molecular_cross_sections!(α, molecular_cross_sections, Ts, vmic, number_densities) + interpolate_molecular_cross_sections!(α, molecular_cross_sections, λs, Ts, vmic, number_densities) Interpolate the molecular cross-sections and add them to the total absorption coefficient `α`. See [`MolecularCrossSection`](@ref) for more information. From fe0fec9a958e2fcc8eec4c60bd52ae99baa755bb Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Mon, 15 Jul 2024 10:36:58 -0400 Subject: [PATCH 22/22] add not about molec sigmas and alpha 5000 --- src/synthesize.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/synthesize.jl b/src/synthesize.jl index 6f4aa783..814cd893 100644 --- a/src/synthesize.jl +++ b/src/synthesize.jl @@ -88,7 +88,8 @@ solution = synthesize(atm, linelist, A_X, 5000, 5100) - `bezier_radiative_transfer` (default: false): Use the radiative transfer scheme. This is for testing purposes only. - `molecular_cross_sections` (default: `[]`): A vector of precomputed molecular cross-sections. See - [`MolecularCrossSection`](@ref) for how to generate these. + [`MolecularCrossSection`](@ref) for how to generate these. If you are using the default radiative + transfer scheme, your molecular cross-sections should cover 5000 Å only if your linelist does. - `use_chemical_equilibrium_from` (default: `nothing`): Takes another solution returned by `synthesize`. When provided, the chemical equilibrium solution will be taken from this object, rather than being recomputed. This is physically self-consistent only when the abundances, `A_X`,