Skip to content

Commit 1177443

Browse files
committed
Phase Integrals: Add implementation for 2nd phase integrals + discussion notes + documentation
1 parent fbb898e commit 1177443

File tree

5 files changed

+83
-24
lines changed

5 files changed

+83
-24
lines changed

src/interfaces/background_field_interface.jl

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,27 @@ Return the first phase integral of the given field, for the given phase space po
216216
217217
```math
218218
\\begin{align*}
219-
B_1(l, p, p^\\prime)& = \\int \\mathrm{d}\\varphi \\exp[\\imath l \\varphi + \\imath G(\\varphi)] \\\\
219+
B_1^\\mu(l, p, p^\\prime)& = \\int \\mathrm{d}\\varphi A^\\mu(\\varphi)\\exp[\\imath l \\varphi + \\imath G(\\varphi)] \\\\
220220
\\end{align*}
221221
```
222-
where ``G(\\varphi,p, p^\\prime)`` is the [`phase function`](@ref), ``(p,p^\\prime)`` the given phase space point, and ``l`` the photon number parameter.
222+
where ``A^\\mu(\\varphi)`` is the background field, ``G(\\varphi,p, p^\\prime)`` is the [`phase function`](@ref), ``(p,p^\\prime)`` the given phase space point, and ``l`` the photon number parameter.
223223
"""
224224
function phase_integral_1 end
225+
226+
"""
227+
228+
phase_integral_2(field::AbstractPulsedPlaneWaveField, pol::AbstractDefinitePolarization, p_in::, p_out::, pnum)
229+
230+
Return the second phase integral of the given field, for the given phase space point `p_in, p_out` and a given photon number parameter `pnum`.
231+
232+
!!! note "Convention"
233+
234+
The second phase integral is defined as:
235+
236+
```math
237+
\\begin{align*}
238+
B_2(l, p, p^\\prime)& = \\int \\mathrm{d}\\varphi A(\\varphi)^2 \\exp[\\imath l \\varphi + \\imath G(\\varphi)] \\\\
239+
\\end{align*}
240+
```
241+
"""
242+
function phase_integral_2 end

src/phase_integrals/first_integral.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function phase_integral_1(
1010
p_out::T,
1111
pnum::T
1212
) where {T<:Real}
13-
return quadgk(t -> , endpoints(domain(field))...)[1]
13+
return quadgk(t -> amplitude(field, pol, t)*_shared_integrand(field, pol, p_in, p_out, t, pnum), endpoints(domain(field))...)[1]
1414
end
1515

1616
function phase_integral_1(

src/phase_integrals/phase_integrals.jl

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22
# Definitions common to all phase integrals
33
###########################################
44

5+
# TODO: We need to talk about the handling of field polarization!
6+
# Since some of the quantities required in phase integral computation are four-vectors, just as the bg-field itself,
7+
# we need to return these as four-vectors, or their components.
8+
# However, we do not even provide the field as a four-vector, yet.
9+
# We just return its "amplitude", which is only the oscillator times the envelope,
10+
# not even taking the correct maximum value a_0 of the field into account. (TODO!)
11+
#
12+
# I think both the polarization and the maximum value of the field should be a user defined quantity,
13+
# but then these should also be members of the field struct, shouldn't they?
14+
# Or are these separately set in the Process?
15+
#
16+
# All in all, I wonder how we should treat four-vectors in QEDfields.
17+
# The problem of missing vectorial information appears here in _field_integral(), _kinematic_vector_phase_factor(), and phase_integral_1().
18+
19+
# TODO: The factors and integrals should not depend on the momenta of particles
20+
# but on the Process and Phase Space Point (the latter of which holds the momenta)
21+
# Question: Does the process hold a reference to the background field?
22+
# If so, the explicit dependence on the background field should be removed to.
23+
524
# from QEDprocesses.jl/src/constants.jl
625
# TODO: we might want to move the constants.jl file to QEDbase? See also TODO in QEDprocesses.jl/src/processes/one_photon_compton/perturbative/cross_section.jl
726
const ALPHA = inv(137.035999074)
@@ -51,6 +70,25 @@ end
5170
end
5271

5372
# non-linear Volkov phase
73+
"""
74+
75+
_phase_function(field::AbstractPulsedPlaneWaveField, pol::AbstractPolarization, p_in::, p_out::, phi::)
76+
77+
Return the phase function (or non-linear Volkov phase), for the given phase space point `p_in, p_out` and a given phase value `phi`.
78+
79+
!!! note "Convention"
80+
81+
The non-linear Volkov phase is defined as:
82+
83+
```math
84+
\\begin{align*}
85+
G(\\varphi,p, p^\\prime)& = \\alpha_1^\\mu \\int\\limits_0^\\varphi \\mathrm{d}\\varphi^\\prime A_\\mu(\\varphi^\\prime)
86+
+ \\alpha_2 \\int\\limits_0^\\varphi \\mathrm{d}\\varphi^\\prime A^2(\\varphi^\\prime) \\\\
87+
\\end{align*}
88+
```
89+
where ``A^\\mu(\\varphi)`` is the background field, ``\\alpha_1^\\mu`` is the [`kinematic vector phase factor`](@ref), and ``\\alpha_2`` is the [`kinematic scalar phase factor`](@ref).
90+
Both ``\\alpha_1^\\mu`` and ``\\alpha_2`` depend on the given phase space point ``(p,p^\\prime)`` and the field's reference momentum ``k^\\mu`` the photon number parameter.
91+
"""
5492
@inline function _phase_function(
5593
field::AbstractPulsedPlaneWaveField,
5694
pol::AbstractPolarization,

src/phase_integrals/second_integral.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function phase_integral_2(
1010
p_out::T,
1111
pnum::T
1212
) where {T<:Real}
13-
return quadgk(t -> , endpoints(domain(field))...)[1]
13+
return quadgk(t -> amplitude(field, pol, t)^2 * _shared_integrand(field, pol, p_in, p_out, t, pnum), endpoints(domain(field))...)[1]
1414
end
1515

1616
function phase_integral_2(

src/phase_integrals/zeroth_integral.jl

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@
22
# Zeroth phase integral
33
#######################
44

5-
# Does it need to be the same T for all arguments?
6-
function phase_integral_0(
7-
field::AbstractPulsedPlaneWaveField,
8-
pol::AbstractPolarization,
9-
p_in::T,
10-
p_out::T,
11-
pnum::T
12-
) where {T<:Real}
13-
return quadgk(t -> , endpoints(domain(field))...)[1]
14-
end
5+
# Is actually diverging, therefore not implmented by now.
6+
function phase_integral_0 end
7+
# The expected signature would be
8+
#phase_integral_0(
9+
# field::AbstractPulsedPlaneWaveField,
10+
# pol::AbstractPolarization,
11+
# p_in::T,
12+
# p_out::T,
13+
# pnum::T
14+
#) where {T<:Real}
15+
# and the questions remains, whether T has to be the same for all arguments.
1516

16-
function phase_integral_0(
17-
field::AbstractPulsedPlaneWaveField,
18-
pol::AbstractPolarization,
19-
p_in::T,
20-
p_out::T,
21-
photon_number_parameter::AbstractVector{T}
22-
) where {T<:Real}
23-
# TODO: maybe use broadcasting here
24-
return map(x -> phase_integral_0(field, p_in, p_out, x), photon_number_parameter)
25-
end
17+
18+
# Implementation of above function for a vector of photon numbers
19+
#function phase_integral_0(
20+
# field::AbstractPulsedPlaneWaveField,
21+
# pol::AbstractPolarization,
22+
# p_in::T,
23+
# p_out::T,
24+
# photon_number_parameter::AbstractVector{T}
25+
#) where {T<:Real}
26+
# # TODO: maybe use broadcasting here
27+
# return map(x -> phase_integral_0(field, pol, p_in, p_out, x), photon_number_parameter)
28+
#end

0 commit comments

Comments
 (0)