Skip to content

Commit c768a57

Browse files
AntonReinhardUwe Hernandez Acostaszabo137AntonReinhard
authored
Introduce InPhaseSpacePoint (#68)
This PR adds a type `InPhaseSpacePoint`, which is a partially specialized version of a `PhaseSpacePoint`. It can be used to dispatch in places where only the incoming part of a phase space is required. Construction of PhaseSpacePoints now allows empty tuples for either incoming or outgoing phase spaces. --------- Co-authored-by: Uwe Hernandez Acosta <[email protected]> Co-authored-by: Uwe Hernandez Acosta <[email protected]> Co-authored-by: AntonReinhard <[email protected]>
1 parent 67b966c commit c768a57

24 files changed

+909
-943
lines changed

src/QEDprocesses.jl

+8-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export AbstractModelDefinition, fundamental_interaction_type
1010
# Abstract process interface
1111
export AbstractProcessDefinition, incoming_particles, outgoing_particles
1212
export number_incoming_particles, number_outgoing_particles
13+
export particles, number_particles
1314

1415
# probabilities
1516
export differential_probability, unsafe_differential_probability
@@ -34,7 +35,7 @@ export propagator
3435
export AbstractCoordinateSystem, SphericalCoordinateSystem
3536
export AbstractFrameOfReference, CenterOfMomentumFrame, ElectronRestFrame
3637
export AbstractPhasespaceDefinition, PhasespaceDefinition
37-
export ParticleStateful, PhaseSpacePoint
38+
export ParticleStateful, PhaseSpacePoint, InPhaseSpacePoint, OutPhaseSpacePoint
3839
export spin, polarization, particle_direction, particle_species, momentum, momenta, getindex
3940

4041
# specific compute models
@@ -54,15 +55,19 @@ include("interfaces/model_interface.jl")
5455
include("interfaces/process_interface.jl")
5556
include("interfaces/setup_interface.jl")
5657

57-
include("phase_spaces.jl")
58+
include("phase_spaces/types.jl")
59+
include("phase_spaces/access.jl")
60+
include("phase_spaces/create.jl")
61+
include("phase_spaces/print.jl")
62+
include("phase_spaces/utility.jl")
63+
5864
include("momentum_generation.jl")
5965
include("propagators.jl")
6066

6167
include("cross_section/diff_probability.jl")
6268
include("cross_section/diff_cross_section.jl")
6369
include("cross_section/total_probability.jl")
6470
include("cross_section/total_cross_section.jl")
65-
include("cross_section/internal.jl")
6671

6772
include("models/models.jl")
6873
include("processes/one_photon_compton/one_photon_compton.jl")

src/cross_section/diff_cross_section.jl

+1-5
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
# cross sections based on the scattering process interface
66
########################
77

8-
function _incident_flux(psp::PhaseSpacePoint)
9-
return _incident_flux(psp.proc, psp.model, momenta(psp, Incoming()))
10-
end
11-
128
"""
139
unsafe_differential_cross_section(phase_space_point::PhaseSpacePoint)
1410
@@ -27,7 +23,7 @@ If the given phase spaces are physical, return differential cross section evalua
2723
"""
2824
function differential_cross_section(phase_space_point::PhaseSpacePoint)
2925
if !_is_in_phasespace(phase_space_point)
30-
return zero(eltype(momentum(phase_space_point, Incoming(), 1)))
26+
return zero(eltype(_momentum_type(phase_space_point)))
3127
end
3228

3329
return unsafe_differential_cross_section(phase_space_point)

src/cross_section/internal.jl

-131
This file was deleted.

src/cross_section/total_cross_section.jl

+5-78
Original file line numberDiff line numberDiff line change
@@ -3,85 +3,12 @@
33
# Total cross sections
44
############
55

6-
# total cross section on single phase space point
7-
# based on four-momenta
8-
function _total_cross_section(
9-
proc::AbstractProcessDefinition,
10-
model::AbstractModelDefinition,
11-
phase_space_def::AbstractPhasespaceDefinition,
12-
in_phase_space::AbstractVector{T},
13-
) where {T<:QEDbase.AbstractFourMomentum}
14-
I = 1 / (4 * _incident_flux(proc, model, in_phase_space))
15-
16-
return I * _total_probability(proc, model, phase_space_def, in_phase_space)
17-
end
18-
19-
# total cross section on single phase space point
20-
# based on coordinates
21-
function _total_cross_section(
22-
proc::AbstractProcessDefinition,
23-
model::AbstractModelDefinition,
24-
phase_space_def::AbstractPhasespaceDefinition,
25-
in_phase_space::AbstractVector{T},
26-
) where {T<:Real}
27-
in_momenta = _generate_incoming_momenta(proc, model, phase_space_def, in_phase_space)
28-
return _total_cross_section(proc, model, phase_space_def, in_momenta)
29-
end
30-
31-
# total cross section on several phase space points
32-
function _total_cross_section(
33-
proc::AbstractProcessDefinition,
34-
model::AbstractModelDefinition,
35-
in_phase_space_def::AbstractPhasespaceDefinition,
36-
in_phase_space::AbstractMatrix{T},
37-
) where {T<:AbstractPhasespaceElement}
38-
res = Vector{eltype(T)}(undef, size(in_phase_space, 2))
39-
for i in 1:size(in_phase_space, 2)
40-
res[i] = _total_cross_section(
41-
proc, model, in_phase_space_def, view(in_phase_space, :, i)
42-
)
43-
end
44-
return res
45-
end
46-
476
"""
48-
total_cross_section(
49-
proc::AbstractProcessDefinition,
50-
model::AbstractModelDefinition,
51-
in_phase_space_def::AbstractPhasespaceDefinition,
52-
in_phase_space::AbstractVecOrMat{T},
53-
) where {T<:QEDbase.AbstractFourMomentum}
7+
total_cross_section(in_psp::InPhaseSpacePoint)
548
55-
Return the total cross section for a given combination of scattering process and compute model, evaluated at the particle momenta.
9+
Return the total cross section for a given [`InPhaseSpacePoint`](@ref).
5610
"""
57-
function total_cross_section(
58-
proc::AbstractProcessDefinition,
59-
model::AbstractModelDefinition,
60-
in_phase_space_def::AbstractPhasespaceDefinition,
61-
in_phase_space::AbstractVecOrMat{T},
62-
) where {T<:QEDbase.AbstractFourMomentum}
63-
_check_in_phase_space_dimension(proc, model, in_phase_space)
64-
65-
return _total_cross_section(proc, model, in_phase_space_def, in_phase_space)
66-
end
67-
68-
"""
69-
total_cross_section(
70-
proc::AbstractProcessDefinition,
71-
model::AbstractModelDefinition,
72-
in_phase_space_def::AbstractPhasespaceDefinition,
73-
in_phase_space::AbstractVecOrMat{T},
74-
) where {T<:Real}
75-
76-
Return the total cross section for a given combination of scattering process and compute model, evaluated at the coordinates.
77-
"""
78-
function total_cross_section(
79-
proc::AbstractProcessDefinition,
80-
model::AbstractModelDefinition,
81-
in_phase_space_def::AbstractPhasespaceDefinition,
82-
in_phase_space::AbstractVecOrMat{T},
83-
) where {T<:Real}
84-
_check_in_phase_space_dimension(proc, model, in_phase_space)
85-
86-
return _total_cross_section(proc, model, in_phase_space_def, in_phase_space)
11+
function total_cross_section(in_psp::InPhaseSpacePoint)
12+
I = 1 / (4 * _incident_flux(in_psp))
13+
return I * _total_probability(in_psp)
8714
end
+4-66
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,12 @@
1-
21
###########
32
# Total probability
43
###########
54

6-
# total probability on a phase space point
7-
# based on coordinates
8-
function _total_probability(
9-
proc::AbstractProcessDefinition,
10-
model::AbstractModelDefinition,
11-
phase_space_def::AbstractPhasespaceDefinition,
12-
in_phase_space::AbstractVector{T},
13-
) where {T<:Real}
14-
in_momenta = _generate_incoming_momenta(proc, model, phase_space_def, in_phase_space)
15-
return _total_probability(proc, model, phase_space_def, in_momenta)
16-
end
17-
18-
# total probability on several phase space points
19-
function _total_probability(
20-
proc::AbstractProcessDefinition,
21-
model::AbstractModelDefinition,
22-
phase_space_def::AbstractPhasespaceDefinition,
23-
in_phase_space::AbstractMatrix{T},
24-
) where {T<:AbstractPhasespaceElement}
25-
res = Vector{eltype(T)}(undef, size(in_phase_space, 2))
26-
for i in 1:size(in_phase_space, 2)
27-
res[i] = _total_probability(
28-
proc, model, phase_space_def, view(in_phase_space, :, i)
29-
)
30-
end
31-
return res
32-
end
33-
34-
"""
35-
total_probability(
36-
proc::AbstractProcessDefinition,
37-
model::AbstractModelDefinition,
38-
phase_space_def::AbstractPhasespaceDefinition,
39-
in_phase_space::AbstractMatrix{T},
40-
) where {T<:QEDbase.AbstractFourMomentum}
41-
42-
Return the total probability of a given model and process combination, evaluated at the particle momenta.
43-
"""
44-
function total_probability(
45-
proc::AbstractProcessDefinition,
46-
model::AbstractModelDefinition,
47-
phase_space_def::AbstractPhasespaceDefinition,
48-
in_phase_space::AbstractVecOrMat{T},
49-
) where {T<:QEDbase.AbstractFourMomentum}
50-
_check_in_phase_space_dimension(proc, model, in_phase_space)
51-
52-
return _total_probability(proc, model, phase_space_def, in_phase_space)
53-
end
54-
555
"""
56-
total_probability(
57-
proc::AbstractProcessDefinition,
58-
model::AbstractModelDefinition,
59-
phase_space_def::AbstractPhasespaceDefinition,
60-
in_phase_space::AbstractMatrix{T},
61-
) where {T<:Real}
6+
total_probability(in_psp::InPhaseSpacePoint)
627
63-
Return the total probability of a given model and process combination, evaluated at the coordinates.
8+
Return the total probability of a given [`InPhaseSpacePoint`](@ref).
649
"""
65-
function total_probability(
66-
proc::AbstractProcessDefinition,
67-
model::AbstractModelDefinition,
68-
phase_space_def::AbstractPhasespaceDefinition,
69-
in_phase_space::AbstractVecOrMat{T},
70-
) where {T<:Real}
71-
_check_in_phase_space_dimension(proc, model, in_phase_space)
72-
73-
return _total_probability(proc, model, phase_space_def, in_phase_space)
10+
function total_probability(in_psp::InPhaseSpacePoint)
11+
return _total_probability(in_psp)
7412
end

0 commit comments

Comments
 (0)