Add flat matrix
This commit is contained in:
@@ -43,9 +43,8 @@ end
|
||||
# Feynman Diagram, tree-level, QED
|
||||
#
|
||||
|
||||
struct FeynmanDiagram{N,E,U,T,M} <: AbstractTreeLevelFeynmanDiagram where {N,E,U,T,M}
|
||||
# TODO: flatten into one list
|
||||
diagram_structure::NTuple{N,Vector{Int}}
|
||||
struct FeynmanDiagram{N,E,U,T,M,FM} <: AbstractTreeLevelFeynmanDiagram where {N,E,U,T,M,FM<:FlatMatrix}
|
||||
diagram_structure::FM
|
||||
|
||||
electron_permutation::NTuple{E,Int}
|
||||
muon_permutation::NTuple{U,Int}
|
||||
@@ -66,13 +65,14 @@ struct FeynmanDiagram{N,E,U,T,M} <: AbstractTreeLevelFeynmanDiagram where {N,E,U
|
||||
@assert T == length(tauon_perm)
|
||||
N = E + U + T
|
||||
|
||||
return new{N,E,U,T,M}(NTuple{N,Vector{Int}}(structure), NTuple{E,Int}(elec_perm), NTuple{U,Int}(muon_perm), NTuple{T,Int}(tauon_perm))
|
||||
fm = FlatMatrix(structure)
|
||||
return new{N,E,U,T,M,typeof(fm)}(fm, NTuple{E,Int}(elec_perm), NTuple{U,Int}(muon_perm), NTuple{T,Int}(tauon_perm))
|
||||
end
|
||||
end
|
||||
|
||||
function virtual_particles(diagram::FeynmanDiagram)
|
||||
function virtual_particles(diagram::FeynmanDiagram{N,E,U,T,M,FM})
|
||||
|
||||
return NTuple{N,Tuple{QEDbase.AbstractParticleType,BitArray}}()
|
||||
return NTuple{N,Tuple{QEDbase.AbstractParticleType,BitArray,BitArray}}()
|
||||
end
|
||||
|
||||
function vertices(::AbstractTreeLevelFeynmanDiagram)
|
||||
@@ -175,8 +175,9 @@ function Base.length(it::FeynmanDiagramIterator{E,U,T,M}) where {E,U,T,M}
|
||||
end
|
||||
|
||||
function Base.iterate(iter::FeynmanDiagramIterator)
|
||||
f = FeynmanDiagram(iter.photon_structure, iter.e_perms[iter.e_index], iter.u_perms[iter.u_index], iter.t_perms[iter.t_index], iter.e, iter.u, iter.t, iter.m)
|
||||
return (
|
||||
FeynmanDiagram(iter.photon_structure, iter.e_perms[iter.e_index], iter.u_perms[iter.u_index], iter.t_perms[iter.t_index], iter.e, iter.u, iter.t, iter.m),
|
||||
f,
|
||||
nothing
|
||||
)
|
||||
end
|
||||
@@ -203,8 +204,9 @@ function Base.iterate(iter::FeynmanDiagramIterator, ::Nothing)
|
||||
(iter.photon_structure, _) = photon_iter_result
|
||||
end
|
||||
|
||||
f = FeynmanDiagram(iter.photon_structure, iter.e_perms[iter.e_index], iter.u_perms[iter.u_index], iter.t_perms[iter.t_index], iter.e, iter.u, iter.t, iter.m)
|
||||
return (
|
||||
FeynmanDiagram(iter.photon_structure, iter.e_perms[iter.e_index], iter.u_perms[iter.u_index], iter.t_perms[iter.t_index], iter.e, iter.u, iter.t, iter.m),
|
||||
f,
|
||||
nothing
|
||||
)
|
||||
end
|
||||
|
Reference in New Issue
Block a user