diff --git a/Project.toml b/Project.toml index 4e027e873..4abcfebcc 100644 --- a/Project.toml +++ b/Project.toml @@ -55,7 +55,7 @@ FillArrays = "0.9, 0.10, 0.11, 0.12, 0.13, 1" Format = "1.2" GPUArrays = "8, 9, 10, 11" Geant4 = "0.1.13, 0.2" -Interpolations = "0.14, 0.15" +Interpolations = "0.14, 0.15, 0.16" IntervalSets = "0.6, 0.7" JSON = "0.21.2" KernelAbstractions = "0.8, 0.9" diff --git a/src/ImpurityDensities/BouleImpurityDensities/LinBouleImpurityDensity.jl b/src/ImpurityDensities/BouleImpurityDensities/LinBouleImpurityDensity.jl index f01fdfec2..38fdda695 100644 --- a/src/ImpurityDensities/BouleImpurityDensities/LinBouleImpurityDensity.jl +++ b/src/ImpurityDensities/BouleImpurityDensities/LinBouleImpurityDensity.jl @@ -16,6 +16,13 @@ struct LinBouleImpurityDensity{T <: SSDFloat} <: AbstractImpurityDensity{T} det_z0::T end +function LinBouleImpurityDensity{T}(pars::Vector{<:Number}, det_z0::Number) where {T} + LinBouleImpurityDensity{T}( + T.(to_internal_units(pars))..., + T(to_internal_units(det_z0)) + ) +end + function ImpurityDensity(T::DataType, t::Val{:linear_boule}, dict::AbstractDict, input_units::NamedTuple) a::T = haskey(dict, "a") ? _parse_value(T, dict["a"], input_units.length^(-3)) : T(0) b::T = haskey(dict, "b") ? _parse_value(T, dict["b"], input_units.length^(-4)) : T(0) @@ -27,4 +34,6 @@ function get_impurity_density(idm::LinBouleImpurityDensity, pt::AbstractCoordina cpt = CartesianPoint(pt) z = cpt[3] idm.a + idm.b * (idm.det_z0 - z) -end \ No newline at end of file +end + +(*)(scale::Real, idm::LinBouleImpurityDensity{T}) where {T} = LinBouleImpurityDensity{T}(T(scale*idm.a), T(scale*idm.b), idm.det_z0) \ No newline at end of file diff --git a/src/ImpurityDensities/BouleImpurityDensities/LinExpBouleImpurityDensity.jl b/src/ImpurityDensities/BouleImpurityDensities/LinExpBouleImpurityDensity.jl index a43464c35..b0cc3c9a7 100644 --- a/src/ImpurityDensities/BouleImpurityDensities/LinExpBouleImpurityDensity.jl +++ b/src/ImpurityDensities/BouleImpurityDensities/LinExpBouleImpurityDensity.jl @@ -22,6 +22,13 @@ struct LinExpBouleImpurityDensity{T <: SSDFloat} <: AbstractImpurityDensity{T} det_z0::T end +function LinExpBouleImpurityDensity{T}(pars::Vector{<:Number}, det_z0::Number) where {T} + LinExpBouleImpurityDensity{T}( + T.(to_internal_units(pars))..., + T(to_internal_units(det_z0)) + ) +end + function ImpurityDensity(T::DataType, t::Val{:linear_exponential_boule}, dict::AbstractDict, input_units::NamedTuple) a::T = haskey(dict, "a") ? _parse_value(T, dict["a"], input_units.length^(-3)) : T(0) b::T = haskey(dict, "b") ? _parse_value(T, dict["b"], input_units.length^(-4)) : T(0) @@ -36,4 +43,6 @@ function get_impurity_density(idm::LinExpBouleImpurityDensity, pt::AbstractCoord cpt = CartesianPoint(pt) z = cpt[3] idm.a + idm.b * (idm.det_z0 - z) + idm.n * exp((idm.det_z0 - z - idm.l)/idm.m) -end \ No newline at end of file +end + +(*)(scale::Real, idm::LinExpBouleImpurityDensity{T}) where {T} = LinExpBouleImpurityDensity{T}(T(scale*idm.a), T(scale*idm.b), T(scale*idm.n), idm.l, idm.m, idm.det_z0) \ No newline at end of file diff --git a/src/ImpurityDensities/BouleImpurityDensities/ParBouleImpurityDensity.jl b/src/ImpurityDensities/BouleImpurityDensities/ParBouleImpurityDensity.jl index a9b6ca563..82876651c 100644 --- a/src/ImpurityDensities/BouleImpurityDensities/ParBouleImpurityDensity.jl +++ b/src/ImpurityDensities/BouleImpurityDensities/ParBouleImpurityDensity.jl @@ -18,6 +18,13 @@ struct ParBouleImpurityDensity{T <: SSDFloat} <: AbstractImpurityDensity{T} det_z0::T end +function ParBouleImpurityDensity{T}(pars::Vector{<:Number}, det_z0::Number) where {T} + ParBouleImpurityDensity{T}( + T.(to_internal_units(pars))..., + T(to_internal_units(det_z0)) + ) +end + function ImpurityDensity(T::DataType, t::Val{:parabolic_boule}, dict::AbstractDict, input_units::NamedTuple) a::T = haskey(dict, "a") ? _parse_value(T, dict["a"], input_units.length^(-3)) : T(0) b::T = haskey(dict, "b") ? _parse_value(T, dict["b"], input_units.length^(-4)) : T(0) @@ -30,4 +37,6 @@ function get_impurity_density(idm::ParBouleImpurityDensity, pt::AbstractCoordina cpt = CartesianPoint(pt) z = cpt[3] idm.a + idm.b * (idm.det_z0 - z) + idm.c * (idm.det_z0 - z)^2 -end \ No newline at end of file +end + +(*)(scale::Real, idm::ParBouleImpurityDensity{T}) where {T} = ParBouleImpurityDensity{T}(T(scale*idm.a), T(scale*idm.b), T(scale*idm.c), idm.det_z0) \ No newline at end of file diff --git a/src/ImpurityDensities/BouleImpurityDensities/ParExpBouleImpurityDensity.jl b/src/ImpurityDensities/BouleImpurityDensities/ParExpBouleImpurityDensity.jl index 486cb2c06..c94df6000 100644 --- a/src/ImpurityDensities/BouleImpurityDensities/ParExpBouleImpurityDensity.jl +++ b/src/ImpurityDensities/BouleImpurityDensities/ParExpBouleImpurityDensity.jl @@ -24,6 +24,13 @@ struct ParExpBouleImpurityDensity{T <: SSDFloat} <: AbstractImpurityDensity{T} det_z0::T end +function ParExpBouleImpurityDensity{T}(pars::Vector{Number}, det_z0::Number) where {T} + ParExpBouleImpurityDensity{T}( + T.(to_internal_units(pars))..., + T(to_internal_units(det_z0)) + ) +end + function ImpurityDensity(T::DataType, t::Val{:parabolic_exponential_boule}, dict::AbstractDict, input_units::NamedTuple) a::T = haskey(dict, "a") ? _parse_value(T, dict["a"], input_units.length^(-3)) : T(0) b::T = haskey(dict, "b") ? _parse_value(T, dict["b"], input_units.length^(-4)) : T(0) @@ -39,4 +46,6 @@ function get_impurity_density(idm::ParExpBouleImpurityDensity, pt::AbstractCoord cpt = CartesianPoint(pt) z = cpt[3] idm.a + idm.b * (idm.det_z0 - z) + idm.c * (idm.det_z0 - z)^2 + idm.n * exp((idm.det_z0 - z - idm.l)/idm.m) -end \ No newline at end of file +end + +(*)(scale::Real, idm::ParExpBouleImpurityDensity{T}) where {T} = ParExpBouleImpurityDensity{T}(T(scale*idm.a), T(scale*idm.b), T(scale*idm.c), T(scale*idm.n), idm.l, idm.m, idm.det_z0) \ No newline at end of file diff --git a/src/ImpurityDensities/ConstantImpurityDensity.jl b/src/ImpurityDensities/ConstantImpurityDensity.jl index 73190841f..6de3cf28f 100644 --- a/src/ImpurityDensities/ConstantImpurityDensity.jl +++ b/src/ImpurityDensities/ConstantImpurityDensity.jl @@ -29,4 +29,6 @@ end function ImpurityDensity(T::DataType, t::Val{:constant}, dict::AbstractDict, input_units::NamedTuple) ρ::T = haskey(dict, "value") ? _parse_value(T, dict["value"], input_units.length^(-3)) : T(0) ConstantImpurityDensity{T}( ρ ) -end \ No newline at end of file +end + +(*)(scale::Real, lcdm::ConstantImpurityDensity{T}) where {T} = ConstantImpurityDensity{T}(T(scale * lcdm.ρ)) \ No newline at end of file diff --git a/src/ImpurityDensities/CylindricalImpurityDensity.jl b/src/ImpurityDensities/CylindricalImpurityDensity.jl index 2adabb861..ce6e5993c 100644 --- a/src/ImpurityDensities/CylindricalImpurityDensity.jl +++ b/src/ImpurityDensities/CylindricalImpurityDensity.jl @@ -52,3 +52,5 @@ function get_impurity_density(lcdm::CylindricalImpurityDensity{T}, pt::AbstractC end return ρ end + +(*)(scale::Real, lcdm::CylindricalImpurityDensity{T}) where {T} = CylindricalImpurityDensity{T}(T.(scale .* lcdm.offsets), T.(scale .* lcdm.gradients)) \ No newline at end of file diff --git a/src/ImpurityDensities/ImpurityDensities.jl b/src/ImpurityDensities/ImpurityDensities.jl index 7f77895d2..5ac63d2e9 100644 --- a/src/ImpurityDensities/ImpurityDensities.jl +++ b/src/ImpurityDensities/ImpurityDensities.jl @@ -27,6 +27,8 @@ abstract type AbstractImpurityDensity{T <: SSDFloat} end return ImpurityDensity(T, Val{Symbol(dict["name"])}(), dict, input_units) end +(*)(idm::AbstractImpurityDensity, scale::Real) = (*)(scale, idm) + """ get_impurity_density(id::AbstractImpurityDensity, pt::AbstractCoordinatePoint) diff --git a/src/ImpurityDensities/LinearImpurityDensity.jl b/src/ImpurityDensities/LinearImpurityDensity.jl index 63f63dd8f..a846afce4 100644 --- a/src/ImpurityDensities/LinearImpurityDensity.jl +++ b/src/ImpurityDensities/LinearImpurityDensity.jl @@ -55,3 +55,5 @@ function get_impurity_density(lcdm::LinearImpurityDensity{T}, pt::AbstractCoordi end return ρ end + +(*)(scale::Real, lcdm::LinearImpurityDensity{T}) where {T} = LinearImpurityDensity{T}(T.(scale .* lcdm.offsets), T.(scale .* lcdm.gradients)) \ No newline at end of file diff --git a/src/SolidStateDetectors.jl b/src/SolidStateDetectors.jl index 4b70f2e69..a8086d5f1 100644 --- a/src/SolidStateDetectors.jl +++ b/src/SolidStateDetectors.jl @@ -58,7 +58,7 @@ import TypedTables import Base: size, sizeof, length, getindex, setindex!, axes, getproperty, broadcast, range, ndims, eachindex, enumerate, iterate, IndexStyle, eltype, in, convert, - show, print, println, display, +, -, & + show, print, println, display, +, -, &, * export SolidStateDetector export SSD_examples