diff --git a/ext/LegendSpecFitsRecipesBaseExt.jl b/ext/LegendSpecFitsRecipesBaseExt.jl index 6352179e..8878a9fb 100644 --- a/ext/LegendSpecFitsRecipesBaseExt.jl +++ b/ext/LegendSpecFitsRecipesBaseExt.jl @@ -127,7 +127,7 @@ end @recipe function f(report:: NamedTuple{(:wl, :min_sf, :a_grid_wl_sg, :sfs)}) xlabel := "Window Length ($(unit(first(report.a_grid_wl_sg))))" - ylabel := "SEP Surrival Fraction ($(unit(first(report.sfs))))" + ylabel := "SEP Survival Fraction ($(unit(first(report.sfs))))" grid := :true gridcolor := :black gridalpha := 0.2 diff --git a/src/aoe_cut.jl b/src/aoe_cut.jl index 291eddc6..116f1c35 100644 --- a/src/aoe_cut.jl +++ b/src/aoe_cut.jl @@ -88,14 +88,14 @@ export get_low_aoe_cut """ - get_peaks_surrival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peaks::Vector{<:T}, peak_names::Vector{Symbol}, windows::Vector{<:Tuple{T, T}}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_funcs::Vector{Symbol}=fill(:gamma_def, length(peaks))) where T<:Unitful.Energy{<:Real} + get_peaks_survival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peaks::Vector{<:T}, peak_names::Vector{Symbol}, windows::Vector{<:Tuple{T, T}}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_funcs::Vector{Symbol}=fill(:gamma_def, length(peaks))) where T<:Unitful.Energy{<:Real} -Get the surrival fraction of a peak after a AoE cut value `aoe_cut` for a given `peak` and `window` size while performing a peak fit with fixed position. +Get the survival fraction of a peak after a AoE cut value `aoe_cut` for a given `peak` and `window` size while performing a peak fit with fixed position. # Return - `result`: Dict of results for each peak - `report`: Dict of reports for each peak """ -function get_peaks_surrival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peaks::Vector{<:T}, peak_names::Vector{Symbol}, windows::Vector{<:Tuple{T, T}}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_funcs::Vector{Symbol}=fill(:gamma_def, length(peaks))) where T<:Unitful.Energy{<:Real} +function get_peaks_survival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peaks::Vector{<:T}, peak_names::Vector{Symbol}, windows::Vector{<:Tuple{T, T}}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_funcs::Vector{Symbol}=fill(:gamma_def, length(peaks))) where T<:Unitful.Energy{<:Real} @assert length(peaks) == length(peak_names) == length(windows) "Length of peaks, peak_names and windows must be equal" # create return and result vectors v_result = Vector{NamedTuple}(undef, length(peak_names)) @@ -106,7 +106,7 @@ function get_peaks_surrival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, # extract peak, name and window peak, name, window, fit_func = peaks[i], peak_names[i], windows[i], fit_funcs[i] # fit peak - result_peak, report_peak = get_peak_surrival_fraction(aoe, e, peak, collect(window), aoe_cut; uncertainty=uncertainty, inverted_mode=inverted_mode, bin_width_window=bin_width_window, sigma_high_sided=sigma_high_sided, fit_func=fit_func) + result_peak, report_peak = get_peak_survival_fraction(aoe, e, peak, collect(window), aoe_cut; uncertainty=uncertainty, inverted_mode=inverted_mode, bin_width_window=bin_width_window, sigma_high_sided=sigma_high_sided, fit_func=fit_func) # save results v_result[i] = result_peak v_report[i] = report_peak @@ -118,24 +118,25 @@ function get_peaks_surrival_fractions(aoe::Vector{<:Unitful.RealOrRealQuantity}, return result, report end -export get_peaks_surrival_fractions -get_peaks_surrival_fractions(aoe, e, peaks, peak_names, left_window_sizes::Vector{<:Unitful.Energy{<:Real}}, right_window_sizes::Vector{<:Unitful.Energy{<:Real}}, aoe_cut; kwargs...) = get_peaks_surrival_fractions(aoe, e, peaks, peak_names, [(l,r) for (l,r) in zip(left_window_sizes, right_window_sizes)], aoe_cut; kwargs...) +get_peaks_survival_fractions(aoe, e, peaks, peak_names, left_window_sizes::Vector{<:Unitful.Energy{<:Real}}, right_window_sizes::Vector{<:Unitful.Energy{<:Real}}, aoe_cut; kwargs...) = get_peaks_survival_fractions(aoe, e, peaks, peak_names, [(l,r) for (l,r) in zip(left_window_sizes, right_window_sizes)], aoe_cut; kwargs...) +Base.@deprecate get_peaks_surrival_fractions(args...; kwargs...) get_peaks_survival_fractions(args...; kwargs...) +export get_peaks_survival_fractions, get_peaks_surrival_fractions """ - get_peak_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peak::T, window::Vector{T}, aoe_cut::Unitful.RealOrRealQuantity,; + get_peak_survival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peak::T, window::Vector{T}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_func::Symbol=:gamma_def) where T<:Unitful.Energy{<:Real} -Get the surrival fraction of a peak after a AoE cut value `aoe_cut` for a given `peak` and `window` size while performing a peak fit with fixed position. +Get the survival fraction of a peak after a AoE cut value `aoe_cut` for a given `peak` and `window` size while performing a peak fit with fixed position. # Returns - `peak`: Peak position - `n_before`: Number of counts before the cut - `n_after`: Number of counts after the cut -- `sf`: Surrival fraction +- `sf`: Survival fraction - `err`: Uncertainties """ -function get_peak_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peak::T, window::Vector{T}, aoe_cut::Unitful.RealOrRealQuantity,; +function get_peak_survival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, peak::T, window::Vector{T}, aoe_cut::Unitful.RealOrRealQuantity,; uncertainty::Bool=true, inverted_mode::Bool=false, bin_width_window::T=2.0u"keV", sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe)), fit_func::Symbol=:gamma_def) where T<:Unitful.Energy{<:Real} # estimate bin width bin_width = get_friedman_diaconis_bin_width(e[e .> peak - bin_width_window .&& e .< peak + bin_width_window]) @@ -162,7 +163,7 @@ function get_peak_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e cut = fit(Histogram, ustrip(e_cut), ustrip(peak-first(window):bin_width:peak+last(window))) # fit peak and return number of signal counts result_after, report_after = fit_subpeaks_th228(survived, cut, result_before; uncertainty=uncertainty, fit_func=fit_func) - # calculate surrival fraction + # calculate survival fraction sf = result_after.sf * 100u"percent" result = ( peak = peak, @@ -182,21 +183,23 @@ function get_peak_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e ) return result, report end -export get_peak_surrival_fraction + +Base.@deprecate get_peak_surrival_fraction(args...; kwargs...) get_peak_survival_fraction(args...; kwargs...) +export get_peak_survival_fraction, get_peak_surrival_fraction """ - get_continuum_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, center::T, window::T, aoe_cut::Unitful.RealOrRealQuantity,; inverted_mode::Bool=false, sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe))) where T<:Unitful.Energy{<:Real} -Get the surrival fraction of a continuum after a AoE cut value `aoe_cut` for a given `center` and `window` size. + get_continuum_survival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, center::T, window::T, aoe_cut::Unitful.RealOrRealQuantity,; inverted_mode::Bool=false, sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe))) where T<:Unitful.Energy{<:Real} +Get the survival fraction of a continuum after a AoE cut value `aoe_cut` for a given `center` and `window` size. # Returns - `center`: Center of the continuum - `window`: Window size - `n_before`: Number of counts before the cut - `n_after`: Number of counts after the cut -- `sf`: Surrival fraction +- `sf`: Survival fraction """ -function get_continuum_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, center::T, window::T, aoe_cut::Unitful.RealOrRealQuantity,; inverted_mode::Bool=false, sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe))) where T<:Unitful.Energy{<:Real} +function get_continuum_survival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantity}, e::Vector{<:T}, center::T, window::T, aoe_cut::Unitful.RealOrRealQuantity,; inverted_mode::Bool=false, sigma_high_sided::Unitful.RealOrRealQuantity=Inf*unit(first(aoe))) where T<:Unitful.Energy{<:Real} # scale unit e_unit = u"keV" # get energy around center @@ -216,7 +219,7 @@ function get_continuum_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantit end n_after = length(e_survived) - # calculate surrival fraction + # calculate survival fraction sf = n_after / n_before result = ( window = measurement(center, window), @@ -238,4 +241,6 @@ function get_continuum_surrival_fraction(aoe::Vector{<:Unitful.RealOrRealQuantit ) return result, report end -export get_continuum_surrival_fraction \ No newline at end of file + +Base.@deprecate get_continuum_surrival_fraction(args...; kwargs...) get_continuum_survival_fraction(args...; kwargs...) +export get_continuum_survival_fraction, get_continuum_surrival_fraction \ No newline at end of file diff --git a/src/aoe_filter_optimization.jl b/src/aoe_filter_optimization.jl index e4f4d3c7..ae661ed8 100644 --- a/src/aoe_filter_optimization.jl +++ b/src/aoe_filter_optimization.jl @@ -83,7 +83,7 @@ function fit_sf_wl(e_dep::Vector{<:Real}, aoe_dep::ArrayOfSimilarArrays{<:Real}, aoe_sep_i = flatview(aoe_sep)[i_aoe, :][isfinite.(flatview(aoe_sep)[i_aoe, :])] ./ result_sep.m_calib e_sep_i = e_sep_calib[isfinite.(flatview(aoe_sep)[i_aoe, :])] - result_sep_sf, _ = get_peak_surrival_fraction(aoe_sep_i, e_sep_i, sep, sep_window, psd_cut.lowcut; uncertainty=uncertainty, fit_func=sep_cut_search_fit_func) + result_sep_sf, _ = get_peak_survival_fraction(aoe_sep_i, e_sep_i, sep, sep_window, psd_cut.lowcut; uncertainty=uncertainty, fit_func=sep_cut_search_fit_func) sep_sfs[i_aoe] = result_sep_sf.sf wls[i_aoe] = wl @@ -98,7 +98,7 @@ function fit_sf_wl(e_dep::Vector{<:Real}, aoe_dep::ArrayOfSimilarArrays{<:Real}, sep_sfs = sep_sfs[fts_success] wls = wls[fts_success] - # get minimal surrival fraction and window length + # get minimal survival fraction and window length sep_sfs_cut = 1.0u"percent" .< sep_sfs .< 100u"percent" if isempty(sep_sfs[sep_sfs_cut]) @error "No valid SEP SF found" diff --git a/src/qc.jl b/src/qc.jl index 60310ec4..dcda2755 100644 --- a/src/qc.jl +++ b/src/qc.jl @@ -10,15 +10,15 @@ function baseline_qc(data::Q, qc_config::PropDict) where Q<:Table # get bl mean cut result_blmean, report_blmean = get_centered_gaussian_window_cut(data.blmean, qc_config.blmean.min, qc_config.blmean.max, qc_config.blmean.sigma, ; n_bins_cut=convert(Int64, round(length(data) * qc_config.blmean.n_bins_fraction)), relative_cut=qc_config.blmean.relative_cut, fixed_center=false, left=true) blmean_qc = result_blmean.low_cut .< data.blmean .< result_blmean.high_cut - @debug format("Baseline Mean cut surrival fraction {:.2f}%", count(blmean_qc) / length(data) * 100) + @debug format("Baseline Mean cut survival fraction {:.2f}%", count(blmean_qc) / length(data) * 100) # get bl slope cut result_blslope, report_blslope = get_centered_gaussian_window_cut(data.blslope, qc_config.blslope.min, qc_config.blslope.max, qc_config.blslope.sigma, ; n_bins_cut=convert(Int64, round(length(data) * qc_config.blslope.n_bins_fraction)), relative_cut=qc_config.blslope.relative_cut, fixed_center=true, left=false, center=zero(data.blslope[1])) blslope_qc = result_blslope.low_cut .< data.blslope .< result_blslope.high_cut - @debug format("Baseline Slope cut surrival fraction {:.2f}%", count(blslope_qc) / length(data) * 100) + @debug format("Baseline Slope cut survival fraction {:.2f}%", count(blslope_qc) / length(data) * 100) # get blsigma cut result_blsigma, report_blsigma = get_centered_gaussian_window_cut(data.blsigma, qc_config.blsigma.min, qc_config.blsigma.max, qc_config.blsigma.sigma, ; n_bins_cut=convert(Int64, round(length(data) * qc_config.blsigma.n_bins_fraction)), relative_cut=qc_config.blsigma.relative_cut, fixed_center=false, left=true) blsigma_qc = result_blsigma.low_cut .< data.blsigma .< result_blsigma.high_cut - @debug format("Baseline Sigma cut surrival fraction {:.2f}%", count(blsigma_qc) / length(data) * 100) + @debug format("Baseline Sigma cut survival fraction {:.2f}%", count(blsigma_qc) / length(data) * 100) result = (blmean = result_blmean, blslope = result_blslope, blsigma = result_blsigma) report = (blmean = report_blmean, blslope = report_blslope, blsigma = report_blsigma)