-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
EchelleInstruments.jl/src/harps-n/util.jl
Lines 1 to 99 in 98d5a94
| function filter_line_list(df::DataFrame, inst::IT ; λmin::Real = default_λmin, λmax::Real = default_λmax ) where { IT<:HARPSN.AnyHARPSN } | |
| df |> @filter(λmin <= _.lambda <= λmax) |> | |
| # @filter( _.lambda < 6000.0 ) |> # Avoid tellurics at redder wavelengths | |
| # @filter( _.lambda >6157 || _.lambda < 6155 ) |> # Avoid "line" w/ large variability | |
| DataFrame | |
| end | |
| """ read_telluric_ranges( filename ) | |
| Return DataFrame (keys lambda_lo and lambda_hi) with wavelength ranges to be avoided as containing tellurics | |
| based on provided CSV file. Assumes path is included in filename. | |
| """ | |
| function read_telluric_ranges(fn::String) | |
| @assert occursin(r"\.csv$",fn) | |
| #println("Trying to read from >",fn,"<.") | |
| @assert isfile(fn) | |
| df = CSV.read(fn, DataFrame) | |
| @assert size(df,1) >= 1 | |
| @assert hasproperty(df,:lambda_lo) | |
| @assert hasproperty(df,:lambda_hi) | |
| return df | |
| end | |
| function make_λ_list_for_bad_columns(line_list::DataFrame, harpsn_data::DT ) where { | |
| T1<:Real, A1<:AbstractArray{T1}, T2<:Real, A2<:AbstractArray{T2}, T3<:Real, A3<:AbstractArray{T3}, | |
| IT<:HARPSN.AnyHARPSN, ST<:Spectra2DBasic{T1,T2,T3,A1,A2,A3,IT}, DT<:AbstractArray{ST,1} } | |
| order_list = 1:size(first(harpsn_data).λ,2) | |
| df_bad_col_λs = DataFrame(:order=>Int[], :lambda_lo=>Float64[], :lambda_hi=>Float64[]) | |
| for order in order_list | |
| λ_extrema = NaNMath.extrema(first(harpsn_data).λ[:,order]) | |
| if isnan(first(λ_extrema)) || isnan(last(λ_extrema)) continue end | |
| for bcr in bad_col_ranges(HARPSN2D(), order) | |
| pixlo = first(bcr) | |
| pixhi = pixlo + 1 | |
| if pixhi > size(first(harpsn_data).λ,1) | |
| pixhi -= 1 | |
| pixlo -= 1 | |
| end | |
| doppler_factors = map(obsid-> haskey(harpsn_data[obsid].metadata,:doppler_factor) ? harpsn_data[obsid].metadata[:doppler_factor] : 1 , 1:length(harpsn_data)) | |
| Δλ_pixel = (first(harpsn_data).λ[pixhi,order] - first(harpsn_data).λ[pixlo,order]) * doppler_factors[1] | |
| (λ_lo, λ_hi) = mapreduce(obsid->extrema(harpsn_data[obsid].λ[bcr,order]) .* doppler_factors[obsid], | |
| (a,b) -> (min(a[1],b[1]), max(a[2],b[2])), 1:length(harpsn_data) ) | |
| λ_lo -= Δλ_pixel/2 | |
| λ_hi += Δλ_pixel/2 | |
| push!(df_bad_col_λs, Dict(:order=>order, :lambda_lo=>λ_lo, :lambda_hi=>λ_hi) ) | |
| end | |
| end | |
| return df_bad_col_λs | |
| end | |
| #= | |
| #old neid function | |
| function make_good_orders_pixels_df(neid_data::DT ; orders::A4 = orders_to_use_default(first(neid_data).inst) ) where { | |
| T1<:Real, A1<:AbstractArray{T1}, T2<:Real, A2<:AbstractArray{T2}, T3<:Real, A3<:AbstractArray{T3}, | |
| IT<:NEID.AnyNEID, ST<:Spectra2DBasic{T1,T2,T3,A1,A2,A3,IT}, DT<:AbstractArray{ST,1}, | |
| T4 <: Integer, A4<:AbstractArray{T4} } | |
| @warn "Deprecated use make_good_orders_pixels_df(inst) instead." | |
| df = DataFrame(order=Int[],pixels=UnitRange[]) | |
| for ord in orders | |
| pixel_array = EchelleInstruments.calc_complement_index_ranges(get_pixel_range(NEID2D(),ord),EchelleInstruments.NEID.bad_col_ranges(NEID2D(),ord)) | |
| order_array = repeat([ord],length(pixel_array)) | |
| df_tmp = DataFrame(:order=>order_array,:pixels=>pixel_array) | |
| append!(df,df_tmp) | |
| end | |
| return df | |
| end | |
| function make_good_orders_pixels_df(inst::IT ; orders::A4 = orders_to_use_default(inst) ) where { | |
| IT<:NEID.AnyNEID, T4 <: Integer, A4<:AbstractArray{T4} } | |
| df = DataFrame(order=Int[],pixels=UnitRange[]) | |
| for ord in orders | |
| pixel_array = EchelleInstruments.calc_complement_index_ranges(get_pixel_range(NEID2D(),ord),EchelleInstruments.NEID.bad_col_ranges(NEID2D(),ord)) | |
| order_array = repeat([ord],length(pixel_array)) | |
| df_tmp = DataFrame(:order=>order_array,:pixels=>pixel_array) | |
| append!(df,df_tmp) | |
| end | |
| return df | |
| end | |
| =# | |
| #= | |
| function make_clean_line_list_from_bad_columns(line_list::DataFrame, neid_data::DT ; | |
| Δv_to_avoid_tellurics::Real = 0.0, v_center_to_avoid_tellurics::Real = 0.0 | |
| ) where { T1<:Real, A1<:AbstractArray{T1}, T2<:Real, A2<:AbstractArray{T2}, T3<:Real, A3<:AbstractArray{T3}, IT<:NEID.AnyNEID, ST<:Spectra2DBasic{T1,T2,T3,A1,A2,A3,IT}, DT<:AbstractArray{ST,1} } | |
| if size(df_bad_col_λs,1) < 1 return line_list end | |
| line_list_to_search_for_tellurics = copy(line_list) | |
| line_list_to_search_for_tellurics.lambda_lo = line_list_to_search_for_tellurics.lambda./calc_doppler_factor(Δv_to_avoid_tellurics).*calc_doppler_factor(v_center_to_avoid_tellurics) | |
| line_list_to_search_for_tellurics.lambda_hi = line_list_to_search_for_tellurics.lambda.*calc_doppler_factor(Δv_to_avoid_tellurics).*calc_doppler_factor(v_center_to_avoid_tellurics) | |
| line_list_no_tellurics_df = line_list_to_search_for_tellurics |> # @filter(λmin <= _.lambda <= λmax) |> | |
| @filter( !RvSpectMLBase.is_in_wavelength_range_list(_.lambda, order=_.order, list=df_bad_col_λs ) ) |> | |
| DataFrame | |
| end | |
| =# | |
| #old neid functions |
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation