Skip to content

Commit 610bcce

Browse files
authored
Make corrections of impurity densities optional (#548)
1 parent 7336b54 commit 610bcce

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/ImpurityDensities/ImpurityDensities.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,24 @@ In this matter the detector impurities are automatically determined from those o
2424
abstract type AbstractImpurityDensity{T <: SSDFloat} end
2525

2626
@inline function ImpurityDensity(T::DataType, dict::AbstractDict, input_units::NamedTuple)
27-
return ImpurityDensity(T, Val{Symbol(dict["name"])}(), dict, input_units)
27+
imp = ImpurityDensity(T, Val{Symbol(dict["name"])}(), dict, input_units)
28+
if !haskey(dict, "corrections")
29+
imp
30+
else
31+
scale = _parse_value(T, get(dict["corrections"], "scale", 1), NoUnits)
32+
offset = _parse_value(T, get(dict["corrections"], "offset", 0), input_units.length^(-3))
33+
(scale * imp) + offset
34+
end
2835
end
2936

3037
(*)(idm::AbstractImpurityDensity, scale::Real) = (*)(scale, idm)
3138
(+)(idm::AbstractImpurityDensity, offset::Union{<:Real, <:Quantity{<:Real, Unitful.𝐋^(-3)}}) = (+)(offset, idm)
3239

40+
# Throw ConfigFileError for impurity densities that do not support corrections
41+
(*)(scale::Real, ::I) where {I <: AbstractImpurityDensity} = throw(ConfigFileError("Impurity density $(I.name.name) does not support corrections"))
42+
(+)(offset::Union{<:Real, <:Quantity{<:Real, Unitful.𝐋^(-3)}}, ::I) where {I <: AbstractImpurityDensity} = throw(ConfigFileError("Impurity density $(I.name.name) does not support corrections"))
43+
44+
3345
"""
3446
get_impurity_density(id::AbstractImpurityDensity, pt::AbstractCoordinatePoint)
3547

src/SolidStateDetector/Semiconductor.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ end
5151
function Semiconductor{T}(dict::AbstractDict, input_units::NamedTuple, outer_transformations) where T <: SSDFloat
5252

5353
impurity_density_model = if haskey(dict, "impurity_density")
54-
hascorrections = haskey(dict["impurity_density"], "corrections")
55-
impurity_density_scale = hascorrections ? _parse_value(T, get(dict["impurity_density"]["corrections"], "scale", 1), NoUnits) : T(1)
56-
impurity_density_offset = hascorrections ? _parse_value(T, get(dict["impurity_density"]["corrections"], "offset", 0), input_units.length^(-3)) : T(0)
57-
impurity_density_scale * ImpurityDensity(T, dict["impurity_density"], input_units) + impurity_density_offset
54+
imp = ImpurityDensity(T, dict["impurity_density"], input_units)
5855
elseif haskey(dict, "charge_density_model")
5956
@warn "Config file deprication: The field \"charge_density_model\" under semiconductor is deprecated.
6057
It should be changed to \"impurity_density\". In later version this will result in an error.

0 commit comments

Comments
 (0)