Add abcmodel tests, Add groundtruth for AB->AB process, fix calculation

This commit is contained in:
2023-11-13 14:15:57 +01:00
parent 1cf8ae643c
commit a97a878881
8 changed files with 119 additions and 24 deletions

View File

@@ -5,6 +5,7 @@ A module containing tools to work on DAGs.
"""
module MetagraphOptimization
# graph types
export DAG
export Node
export Edge
@@ -18,6 +19,7 @@ export FusedComputeTask
export PossibleOperations
export GraphProperties
# graph functions
export make_node
export make_edge
export insert_node
@@ -31,6 +33,7 @@ export get_properties
export get_exit_node
export is_valid, is_scheduled
# graph operation related
export Operation
export AppliedOperation
export NodeFusion
@@ -42,6 +45,10 @@ export can_pop
export reset_graph!
export get_operations
# ABC model
export ParticleValue
export ParticleA, ParticleB, ParticleC
export ABCProcessDescription, ABCProcessInput, ABCModel
export ComputeTaskP
export ComputeTaskS1
export ComputeTaskS2
@@ -49,14 +56,17 @@ export ComputeTaskV
export ComputeTaskU
export ComputeTaskSum
# code generation related
export execute
export parse_dag, parse_process
export gen_process_input
export get_compute_function
export ParticleValue
export ParticleA, ParticleB, ParticleC
export ABCProcessDescription, ABCProcessInput, ABCModel
# estimator
export cost_type, graph_cost
export GlobalMetricEstimator, CDCost
# machine info
export Machine
export get_machine_info

View File

@@ -55,7 +55,8 @@ function compute(::ComputeTaskS2, data1::ParticleValue{P}, data2::ParticleValue{
@assert isapprox(data1.p.momentum.py, -data2.p.momentum.py, rtol = 0.001, atol = sqrt(eps())) "py: $(data1.p.momentum.py) vs. $(data2.p.momentum.py)"
@assert isapprox(data1.p.momentum.pz, -data2.p.momentum.pz, rtol = 0.001, atol = sqrt(eps())) "pz: $(data1.p.momentum.pz) vs. $(data2.p.momentum.pz)"
=#
return data1.v * inner_edge(data1.p) * data2.v
inner = inner_edge(data1.p)
return data1.v * inner * data2.v
end
"""

View File

@@ -1,5 +1,7 @@
using QEDbase
import QEDbase.mass
"""
ABCModel <: AbstractPhysicsModel
@@ -87,9 +89,9 @@ For 2 given (non-equal) particle types, return the third of ABC.
"""
function interaction_result(t1::Type{T1}, t2::Type{T2}) where {T1 <: ABCParticle, T2 <: ABCParticle}
@assert t1 != t2
if t1 != Type{ParticleA} && t2 != Type{ParticleA}
if t1 != ParticleA && t2 != ParticleA
return ParticleA
elseif t1 != Type{ParticleB} && t2 != Type{ParticleB}
elseif t1 != ParticleB && t2 != ParticleB
return ParticleB
else
return ParticleC
@@ -161,7 +163,6 @@ Takes 4 effective FLOP.
function preserve_momentum(p1::ABCParticle, p2::ABCParticle)
t3 = interaction_result(typeof(p1), typeof(p2))
p3 = t3(p1.momentum + p2.momentum)
return p3
end