{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition number_particles(QEDbase.AbstractProcessDefinition, DIR, PT) where {DIR<:QEDbase.ParticleDirection, PT<:QEDbase.AbstractParticleType} in module QEDbase at /home/antonr/.julia/packages/QEDbase/gWHxL/src/interfaces/process.jl:208 overwritten in module FeynmanDiagramGenerator at /home/antonr/repos/FeynmanDiagramGenerator/src/QEDprocesses_patch.jl:23.\n", "ERROR: Method overwriting is not permitted during Module precompilation. Use `__precompile__(false)` to opt-out of precompilation.\n" ] } ], "source": [ "using FeynmanDiagramGenerator" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "254-element Vector{VirtualParticle{GenericQEDProcess{Tuple{Photon, Photon, Photon, Photon, Photon, Photon, Photon, Electron}, Tuple{Photon, Electron}}, PT, 8, 2} where PT<:AbstractParticleType}:\n", " positron: \t00000000 | 11\n", " electron: \t00000001 | 10\n", " positron: \t00000010 | 01\n", " electron: \t00000011 | 00\n", " positron: \t00000100 | 01\n", " electron: \t00000101 | 00\n", " positron: \t00001000 | 01\n", " electron: \t00001001 | 00\n", " positron: \t00010000 | 01\n", " electron: \t00010001 | 00\n", " ⋮\n", " electron: \t11100001 | 10\n", " positron: \t11100010 | 01\n", " electron: \t11100011 | 00\n", " positron: \t11100100 | 01\n", " electron: \t11100101 | 00\n", " positron: \t11101000 | 01\n", " electron: \t11101001 | 00\n", " positron: \t11110000 | 01\n", " electron: \t11110001 | 00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "proc = GenericQEDProcess(7, 1, 1, 1, 0, 0)\n", "all_particles = Set()\n", "for fd in feynman_diagrams(proc) \n", " push!(all_particles, virtual_particles(proc, fd)...)\n", "end\n", "all_particles = sort([all_particles...])\n", "display(all_particles)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "pseudo_particles = FeynmanDiagramGenerator._pseudo_virtual_particles(proc)\n", "\n", "pairs = Dict{VirtualParticle, Vector{Tuple{VirtualParticle, VirtualParticle}}}()\n", "for p in all_particles\n", " pairs[p] = particle_pairs(p, [all_particles..., pseudo_particles...])\n", " #println(\"$p has $(length(pairs[p])) children: $(pairs[p])\")\n", "end\n", "\n", "#pairs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "280-element Vector{Tuple{VirtualParticle, VirtualParticle, VirtualParticle}}:\n", " (photon: \t00000000 | 10, electron: \t11001101 | 00, positron: \t00110010 | 01)\n", " (photon: \t00000000 | 10, electron: \t01101001 | 00, positron: \t10010110 | 01)\n", " (photon: \t00000000 | 10, electron: \t01010101 | 00, positron: \t10101010 | 01)\n", " (photon: \t00000000 | 10, electron: \t11000111 | 00, positron: \t00111000 | 01)\n", " (photon: \t00000000 | 10, electron: \t11101001 | 00, positron: \t00010110 | 01)\n", " (photon: \t00000000 | 10, electron: \t00101101 | 00, positron: \t11010010 | 01)\n", " (photon: \t00000000 | 10, electron: \t11100101 | 00, positron: \t00011010 | 01)\n", " (photon: \t00000000 | 10, electron: \t01010011 | 00, positron: \t10101100 | 01)\n", " (photon: \t00000000 | 10, electron: \t00001111 | 00, positron: \t11110000 | 01)\n", " (photon: \t00000000 | 10, electron: \t01001011 | 00, positron: \t10110100 | 01)\n", " ⋮\n", " (photon: \t01000000 | 00, electron: \t10011011 | 00, positron: \t00100100 | 11)\n", " (photon: \t01000000 | 00, electron: \t10110011 | 00, positron: \t00001100 | 11)\n", " (photon: \t01000000 | 00, electron: \t00110101 | 00, positron: \t10001010 | 11)\n", " (photon: \t01000000 | 00, electron: \t00011101 | 00, positron: \t10100010 | 11)\n", " (photon: \t01000000 | 00, electron: \t10101101 | 00, positron: \t00010010 | 11)\n", " (photon: \t01000000 | 00, electron: \t10001011 | 10, positron: \t00110100 | 01)\n", " (photon: \t01000000 | 00, electron: \t00001011 | 10, positron: \t10110100 | 01)\n", " (photon: \t01000000 | 00, electron: \t10001111 | 00, positron: \t00110000 | 11)\n", " (photon: \t01000000 | 00, electron: \t10100011 | 10, positron: \t00011100 | 01)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "triples = FeynmanDiagramGenerator.total_particle_triples(all_particles)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "s: 40320, should be: 40320\n", "number of triples: 280\n" ] }, { "data": { "text/plain": [ "280-element Vector{Tuple{VirtualParticle, VirtualParticle, VirtualParticle}}:\n", " (photon: \t00000000 | 10, electron: \t00001111 | 00, positron: \t11110000 | 01)\n", " (photon: \t00000000 | 10, electron: \t00010111 | 00, positron: \t11101000 | 01)\n", " (photon: \t00000000 | 10, electron: \t00011011 | 00, positron: \t11100100 | 01)\n", " (photon: \t00000000 | 10, electron: \t00011101 | 00, positron: \t11100010 | 01)\n", " (photon: \t00000000 | 10, electron: \t00100111 | 00, positron: \t11011000 | 01)\n", " (photon: \t00000000 | 10, electron: \t00101011 | 00, positron: \t11010100 | 01)\n", " (photon: \t00000000 | 10, electron: \t00101101 | 00, positron: \t11010010 | 01)\n", " (photon: \t00000000 | 10, electron: \t00110011 | 00, positron: \t11001100 | 01)\n", " (photon: \t00000000 | 10, electron: \t00110101 | 00, positron: \t11001010 | 01)\n", " (photon: \t00000000 | 10, electron: \t00111001 | 00, positron: \t11000110 | 01)\n", " ⋮\n", " (photon: \t01000000 | 00, electron: \t10100101 | 10, positron: \t00011010 | 01)\n", " (photon: \t01000000 | 00, electron: \t10100111 | 00, positron: \t00011000 | 11)\n", " (photon: \t01000000 | 00, electron: \t10101001 | 10, positron: \t00010110 | 01)\n", " (photon: \t01000000 | 00, electron: \t10101011 | 00, positron: \t00010100 | 11)\n", " (photon: \t01000000 | 00, electron: \t10101101 | 00, positron: \t00010010 | 11)\n", " (photon: \t01000000 | 00, electron: \t10110001 | 10, positron: \t00001110 | 01)\n", " (photon: \t01000000 | 00, electron: \t10110011 | 00, positron: \t00001100 | 11)\n", " (photon: \t01000000 | 00, electron: \t10110101 | 00, positron: \t00001010 | 11)\n", " (photon: \t01000000 | 00, electron: \t10111001 | 00, positron: \t00000110 | 11)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "function n(vp::VirtualParticle)\n", " if !haskey(pairs, vp)\n", " return 1\n", " end\n", " s = 0\n", " for (l, r) in pairs[vp]\n", " s += n(l) * n(r)\n", " end\n", " return s\n", "end\n", "\n", "n(last(all_particles))\n", "s = 0\n", "for (ph, e, p) in triples\n", " s += n(ph) * n(e) * n(p)\n", "end\n", "\n", "println(\"s: $s, should be: $(length(feynman_diagrams(proc)))\")\n", "println(\"number of triples: $(length(triples))\")\n", "\n", "sort(triples)" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.10.4", "language": "julia", "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }