Skip to content

Commit 69762f1

Browse files
t-hahnVladyslav Shtabovenko
authored andcommitted
FeynArts 3.7
1 parent 48afbf8 commit 69762f1

20 files changed

+684
-1049
lines changed

FeynArts.m

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
(*
22
3-
This is FeynArts, Version 3.6
4-
Copyright by Sepp Kueblbeck, Hagen Eck, and Thomas Hahn 1991-2011
5-
last modified 28 Mar 11 by Thomas Hahn
3+
This is FeynArts, Version 3.7
4+
Copyright by Sepp Kueblbeck, Hagen Eck, and Thomas Hahn 1991-2012
5+
last modified 4 Dec 12 by Thomas Hahn
66
77
Release notes:
88
@@ -44,9 +44,9 @@
4444

4545

4646
Print[""];
47-
Print["FeynArts 3.6"];
47+
Print["FeynArts 3.7"];
4848
Print["by Hagen Eck, Sepp Kueblbeck, and Thomas Hahn"];
49-
Print["last revised 28 Mar 11"]
49+
Print["last revised 4 Dec 12"]
5050

5151

5252
BeginPackage["FeynArts`"]
@@ -702,6 +702,11 @@ on a propagator of type t (External, Internal, Loop)."
702702

703703
KIs = {KI1, KI2, KI3, KI4}
704704

705+
SI::usage = "SI[n] is the nth summation index in a component of the
706+
kinematic vector."
707+
708+
SIs = {SI1_, SI2_, SI3_, SI4}
709+
705710
CI::usage = "CI[n] is the classes index of the nth field in the
706711
kinematic vector."
707712

@@ -986,6 +991,16 @@ as arguments the quantum numbers of the involved fields (times -1 for
986991
integral. If no definition is made for ConjugateCoupling, the final
987992
amplitudes will contain this symbol."
988993

994+
GetCouplings::usage =
995+
"GetCouplings[C[fi], ...] returns all couplings of the form C[fi] == _
996+
in M$CouplingMatrices."
997+
998+
ReplaceCouplings::usage =
999+
"ReplaceCouplings[C[fi] == coup] replaces all couplings matching C[fi]
1000+
in M$CouplingMatrices. All couplings in M$CouplingMatrices, including
1001+
the former versions of the ones being replaced, may be used on the
1002+
r.h.s. in the form C[fields]."
1003+
9891004
G::usage =
9901005
"G[sym][cto][fields][kinpart] is a generic coupling matrix of
9911006
counter-term order cto for fields corresponding to the kinematical
@@ -1027,6 +1042,13 @@ as arguments the quantum numbers of the involved fields (times -1 for
10271042
whether momentum conservation at each vertex is enforced. If set to
10281043
False, every propagator will carry its own momentum."
10291044

1045+
GraphInfoFunction::usage =
1046+
"GraphInfoFunction is an option of CreateFeynAmp. It specifies a
1047+
function with which every diagram is multiplied. The function receives
1048+
two arguments, f[rul, top], where rul are the insertion rules and top
1049+
the corresponding topology of the diagram. This function can be used
1050+
to add graph information to the amplitude."
1051+
10301052
VertexDebug::usage =
10311053
"VertexDebug[debuginfo] is a function invoked whenever a vertex cannot
10321054
be resolved. It is used for debugging FeynArts."
@@ -1113,15 +1135,25 @@ as arguments the quantum numbers of the involved fields (times -1 for
11131135

11141136
$FermionLines::usage =
11151137
"$FermionLines is a FeynArts system constant that can be True or False
1116-
indicating whether CreateFeynAmp should collect fermion fields F in
1117-
lines or not. Fermion line construction has to be turned off for
1118-
generic models that contain couplings involving more than two fermions
1119-
(it is for example impossible to reliably determine how two fermion
1120-
lines run through a 4-fermion vertex). In such a case the fermions
1121-
should carry a kinematical (e.g. Dirac) index. Note that if
1122-
$FermionLines = False the classes option MatrixTraceFactor has no effect
1123-
on fermionic classes and also no additional minus signs are inserted for
1124-
odd permutations of external fermions."
1138+
indicating whether CreateFeynAmp should collect Grassmann-valued fields
1139+
(typically F and U) in lines or not.
1140+
Fermion line construction has to be turned off for generic models that
1141+
contain couplings involving more than two fermions (it is for example
1142+
impossible to reliably determine how two fermion lines run through a
1143+
four-fermion vertex). In such a case the fermions should carry a
1144+
kinematical (e.g. Dirac) index.
1145+
Note that if $FermionLines = False, the M$ClassesDescription option
1146+
MatrixTraceFactor has no effect on fermionic classes and also no
1147+
additional minus signs are inserted for odd permutations of external
1148+
fermions."
1149+
1150+
$SparseCouplings::usage =
1151+
"$SparseCouplings is a FeynArts system constant. If set to True, a
1152+
model is initialized such that all zero-components of the coupling
1153+
vector are handled by a single default rule, which speeds up lookup of
1154+
Feynman rules in the presence of large but sparse coupling vectors.
1155+
Use with care, as individual checks of the kinematical components are
1156+
not possible anymore then."
11251157

11261158
FeynAmp::usage =
11271159
"FeynAmp is the head of a data structure that represents the analytical
@@ -1326,7 +1358,7 @@ topologies where it specifies whether the field numbers (the n in
13261358
P$Options = (_Rule | _RuleDelayed)...
13271359

13281360

1329-
$FeynArts = 3.6
1361+
$FeynArts = 3.7
13301362

13311363
$FeynArtsDir = DirectoryName[ File /.
13321364
FileInformation[System`Private`FindFile[$Input]] ]

FeynArts/Analytic.m

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Analytic.m
33
Translation of InsertFields output into
44
analytic expressions
5-
last modified 28 Mar 11 th
5+
last modified 8 Oct 12 th
66
*)
77

88
Begin["`Analytic`"]
@@ -12,7 +12,8 @@
1212
GaugeRules -> {_GaugeXi -> 1},
1313
PreFactor -> -I (2 Pi)^(-4 LoopNumber),
1414
Truncated -> False,
15-
MomentumConservation -> True
15+
MomentumConservation -> True,
16+
GraphInfoFunction -> (1 &)
1617
}
1718

1819
(* for D dimensions use
@@ -54,8 +55,8 @@
5455
CreateFeynAmp[ TopologyList[][tops], opt ]
5556

5657
CreateFeynAmp[ tops:TopologyList[info___][___], options___Rule ] :=
57-
Block[ {alevel, pref, next, gaugeru, truncru, momcons, amps, head,
58-
topnr = 1, opt = ActualOptions[CreateFeynAmp, options]},
58+
Block[ {alevel, pref, next, gaugeru, truncru, momcons, graphinfo, toplist,
59+
amps, head, topnr = 1, opt = ActualOptions[CreateFeynAmp, options]},
5960

6061
If[ (alevel = ResolveLevel[AmplitudeLevel /. opt /. {info} /.
6162
Options[InsertFields]]) === $Failed,
@@ -73,6 +74,8 @@
7374
gaugeru = GaugeRules /. opt;
7475
truncru = If[ TrueQ[Truncated /. opt], M$TruncationRules, {} ];
7576
momcons = TrueQ[MomentumConservation /. opt];
77+
graphinfo = GraphInfoFunction /. opt;
78+
toplist = TopologyList[info];
7679

7780
amps = PickLevel[alevel][tops];
7881
Scan[ If[FreeQ[amps, #], Message[CreateFeynAmp::nolevel, #]]&, alevel ];
@@ -85,7 +88,8 @@
8588

8689
head = FeynAmpList[info] /.
8790
(Process -> iorule_) :> (Process ->
88-
MapIndexed[{#1, iomom@@ #2, TheMass[#1, External]}&, iorule, {2}]) /.
91+
MapIndexed[{#1, iomom@@ #2, TheMass[#1, External],
92+
QuantumNumbers[ToClasses[#1]]}&, iorule, {2}]) /.
8993
(InsertionLevel -> _) :> (AmplitudeLevel -> alevel);
9094

9195
amps = head@@ amps /. _MTF -> 1 /. gaugeru //. M$LastModelRules;
@@ -124,7 +128,7 @@
124128
];
125129
(* renumber the internal momenta *)
126130
oldmom = Union[ Cases[momtop, FourMomentum[_ZZZ, _], Infinity] ];
127-
imom = Apply[RenumberMom, oldmom, 1];
131+
imom = RenumberMom@@@ oldmom;
128132
momtop = momtop /. Thread[oldmom -> imom];
129133

130134
toppref = pref /. LoopNumber :> Genus[top];
@@ -226,7 +230,7 @@ Since momenta on tree propagators (Propagator[Internal])
226230
rawgm = gm /.
227231
s1_. _[__, orig[s2_, fi_], k___] :>
228232
app[ If[s1 === s2, fi, anti[fi]], k ];
229-
Append[amp, gm -> (CreateAmpIns[rawgm, s mtf, #]&)/@ ins] /.
233+
Append[amp, gm -> (CreateAmpIns[top, rawgm, s mtf, #]&)/@ ins] /.
230234
orig[__] :> Seq[]
231235
]
232236

@@ -514,10 +518,11 @@ need another (-1)^(Length[ext]/2).
514518
SumOver[i, l, ext] /; r === Range[l]
515519

516520

517-
CreateAmpIns[ gm_, sgen_, gr_ -> ins_ ] :=
518-
CreateAmpIns[gm, sgen, gr] -> (CreateAmpIns[gm, sgen, #]&)/@ ins
521+
CreateAmpIns[ top_, gm_, sgen_, gr_ -> ins_ ] :=
522+
CreateAmpIns[top, gm, sgen, gr] ->
523+
(CreateAmpIns[top, gm, sgen, #]&)/@ ins
519524

520-
CreateAmpIns[ gm_, sgen_, gr:FeynmanGraph[s_, ___][ru__] ] :=
525+
CreateAmpIns[ top_, gm_, sgen_, gr:FeynmanGraph[s_, ___][ru__] ] :=
521526
Block[ {ext, int, ins, deltas},
522527
ins = ReplacePart[gm, sgen/s, -1] /. {ru} /.
523528
anti -> AntiParticle /.
@@ -530,6 +535,7 @@ need another (-1)^(Length[ext]/2).
530535
ext = Union[Cases[Take[{ru}, next], _Index, Infinity]];
531536
int = Complement[Cases[Drop[{ru}, next], _Index, Infinity], ext];
532537
ins[[-1]] *=
538+
graphinfo[FeynmanGraph[ru], top, toplist] *
533539
Times@@ deltas *
534540
Times@@ (SumOver[#, IndexRange[Take[#, 1]], External]&)/@ ext *
535541
Times@@ (SumOver[#, IndexRange[Take[#, 1]]]&)/@ int;
@@ -554,7 +560,7 @@ kinematical expression (for a G[-]). If neither method resolves TheC,
554560
ferm = Cases[vert, _. _F];
555561
vert = vert[[perm]];
556562
kin = k /. MapIndexed[KinRule, perm];
557-
If[ ferm =!= Cases[vert, _. _F],
563+
If[ Length[M$FlippingRules] > 0 && ferm =!= Cases[vert, _. _F],
558564
If[ Length[ferm] > 2, Message[CreateFeynAmp::ambig, vert] ];
559565
kin = kin /. M$FlippingRules ];
560566

0 commit comments

Comments
 (0)