89 lines
2.4 KiB
Fish
Raw Normal View History

2023-06-16 01:55:49 +02:00
#!/bin/fish
function printhelp
echo "Give an interaction like \"AB->AB\" you want to generate the graph for"
exit 1
end
if test $(count $argv) -ne 1
printhelp
end
set OutFile "$argv.txt"
set inout $(string split -- "->" $argv)
if test $(count $inout) -ne 2
echo "Couldn't parse string into in and out particles"
printhelp
end
set PythonCommand "import FeynmanDAG"
set particlesIn $(string split '' $inout[1])
set particlesOut $(string split '' $inout[2])
set ACount 0
set BCount 0
set CCount 0
for i in $(seq $(count $particlesIn))
switch $particlesIn[$i]
case A
set ACount $(math $ACount + 1)
set name "\"$particlesIn[$i]$ACount\""
case B
set BCount $(math $BCount + 1)
set name "\"$particlesIn[$i]$BCount\""
case C
set CCount $(math $CCount + 1)
set name "\"$particlesIn[$i]$CCount\""
case '*'
echo "Encountered unknown particle $particlesIn[$i]"
printhelp
end
set particlesIn[$i] "FeynmanDAG.Particle$particlesIn[$i]($name, True, True)"
end
for i in $(seq $(count $particlesOut))
switch $particlesOut[$i]
case A
set ACount $(math $ACount + 1)
set name "\"$particlesOut[$i]$ACount\""
case B
set BCount $(math $BCount + 1)
set name "\"$particlesOut[$i]$BCount\""
case C
set CCount $(math $CCount + 1)
set name "\"$particlesOut[$i]$CCount\""
case '*'
echo "Encountered unknown particle $particlesOut[$i]"
printhelp
end
set particlesOut[$i] "FeynmanDAG.Particle$particlesOut[$i]($name, False, True)"
end
set ParticlesList "["
for i in $(seq $(count $particlesIn))
if test $i -ne 1
set ParticlesList "$ParticlesList, "
end
set ParticlesList "$ParticlesList$particlesIn[$i]"
end
for i in $(seq $(count $particlesOut))
set ParticlesList "$ParticlesList, $particlesOut[$i]"
end
set ParticlesList "$ParticlesList]"
set PythonCommand "$PythonCommand;particles = $ParticlesList"
set PythonCommand "$PythonCommand;g = FeynmanDAG.ComputeGraph.generate(particles)"
set PythonCommand "$PythonCommand;d = g.DAG_generator()"
set PythonCommand "$PythonCommand;outfile = open(\"$OutFile\", \"w\")"
set PythonCommand "$PythonCommand;outfile.write(str(d.nodes()) + \"\\\n\")"
set PythonCommand "$PythonCommand;outfile.write(str(d.edges()) + \"\\\n\")"
set PythonCommand "$PythonCommand;outfile.close()"
echo "PythonCommand: $PythonCommand"
echo -e "$PythonCommand" | python