-
Notifications
You must be signed in to change notification settings - Fork 2
/
FormCalc.m
8320 lines (5976 loc) · 237 KB
/
FormCalc.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
(*
This is FormCalc, Version 9.10
Copyright by Thomas Hahn 1996-2022
last modified 30 Aug 22 by Thomas Hahn
Release notes:
FormCalc is free software, but is not in the public domain.
Instead it is covered by the GNU Lesser General Public License.
In plain English this means:
1. We don't promise that this software works.
(But if you find any bugs, please let us know!)
2. You can use this software for whatever you want.
You don't have to pay us.
3. You may not pretend that you wrote this software.
If you use it in a program, you must acknowledge
somewhere in your publication that you've used
our code.
If you're a lawyer, you can find the legal stuff at
http://gnu.org/licenses/lgpl.html.
The user guide for this program can be found at
http://feynarts.de/formcalc.
If you find any bugs, or want to make suggestions, or
just write fan mail, address it to:
Thomas Hahn
Max Planck Institute for Physics
Foehringer Ring 6
D-80805 Munich, Germany
e-mail: hahn@feynarts.de
Have fun!
*)
(* symbols from FeynArts *)
BeginPackage["FeynArts`"]
{ Topology, TopologyList, FeynAmp, FeynAmpList,
Process, GraphID, FieldPoint, Incoming, Outgoing,
Generic, Classes, Particles,
Insertions, G, Mass, GaugeXi, VertexFunction,
PropagatorDenominator, FeynAmpDenominator,
FourMomentum, Internal, External, TheMass,
Index, IndexDelta, IndexEps, IndexSum, SumOver,
MatrixTrace, FermionChain, NonCommutative, LeviCivita,
CreateTopologies, ExcludeTopologies, Tadpoles,
InitializeModel, $ModelPath, $Model, Model, GenericModel,
Reinitialize, InsertFields, InsertionLevel, AmplitudeLevel,
ExcludeParticles, ExcludeFieldPoints, LastSelections,
Restrictions, CreateFeynAmp, Truncated,
RenConst, MassShift, Paint, DiagramGrouping }
P$Field = (F | S | V | T | U | _Mix | _Rev)[__]
EndPackage[]
(* symbols from LoopTools *)
BeginPackage["LoopTools`"]
PaVeIntegral = A0i | B0i | C0i | D0i | E0i | F0i |
A0 | A00 | B0 | B1 | B00 | B11 | B001 | B111 |
DB0 | DB1 | DB00 | DB11 | C0 | D0 | E0 | F0
{ Nbb, bb0, bb1, bb00, bb11, bb001, bb111, dbb0, dbb1, dbb00, dbb11,
Ncc, cc0, cc00, cc001, cc002, cc0000, cc0011, cc0022, cc0012,
Ndd, dd0, dd0000, dd00001, dd00002, dd00003,
Nee, ee0,
Nff, ff0 }
A0::usage =
"A0[m] is the one-point one-loop scalar integral. m is the mass
squared."
A00::usage =
"A00[m] is the one-point tensor coefficient of g_{mu nu}. m is the mass
squared."
B0i::usage =
"B0i[id, p, m1, m2] is the generic two-point one-loop integral which
includes scalar and tensor coefficients as well as their derivatives
with respect to p, specified by id. For example, B0i[bb0, ...] is the
scalar function B_0, B0i[bb11, ...] the tensor coefficient function
B_{11} etc. p is the external momentum squared and m1 and m2 are the
masses squared."
Bput::usage =
"Bput[p, m1, m2] computes all two-point coefficients in LoopTools."
C0i::usage =
"C0i[id, p1, p2, p1p2, m1, m2, m3] is the generic three-point one-loop
integral which includes both scalar and tensor coefficients, specified
by id. For example, C0i[cc0, ...] is the scalar function C_0,
C0i[cc112, ...] the tensor coefficient function C_{112} etc. p1, p2,
and p1p2 are the external momenta squared and m1, m2, m3 are the masses
squared."
Cput::usage =
"Cput[p1, p2, p1p2, m1, m2, m3] computes all three-point coefficients in
LoopTools."
D0i::usage =
"D0i[id, p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4] is the generic
four-point one-loop integral which includes both scalar and tensor
coefficients, specified by id. For example, D0i[dd0, ...] is the scalar
function D_0, D0i[dd1233, ...] the tensor function D_{1233} etc.
p1...p4 are the external momenta squared, p1p2 and p2p3 are the squares
of external momenta (1+2) and (2+3), respectively, and m1...m4 are the
masses squared."
Dput::usage =
"Dput[p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4] computes all
four-point coefficients in LoopTools."
E0i::usage =
"E0i[id, p1, p2, p3, p4, p5, p1p2, p2p3, p3p4, p4p5, p5p1, m1, m2, m3,
m4, m5] is the generic five-point one-loop integral which includes both
scalar and tensor coefficients, specified by id. For example,
E0i[ee0, ...] is the scalar function E_0, E0i[ee1244, ...] the tensor
function E_{1244} etc. p1...p5 are the external momenta squared,
p1p2...p5p1 are the squares of external momenta (1+2)...(5+1),
respectively, and m1...m5 are the masses squared."
Eput::usage =
"Eput[p1, p2, p3, p4, p5, p1p2, p2p3, p3p4, p4p5, p5p1, m1, m2, m3, m4,
m5] computes all five-point coefficients in LoopTools."
F0i::usage =
"F0i[id, p1, p2, p3, p4, p5, p6, p1p2, p2p3, p3p4, p4p5, p5p6, p6p1,
p1p2p3, p2p3p4, p3p4p5, m1, m2, m3, m4, m5, m6] is the generic six-point
one-loop integral which includes both scalar and tensor coefficients,
specified by id. For example, F0i[ff0, ...] is the scalar function F_0,
F0i[ff1244, ...] the tensor function F_{1244} etc. p1...p6 are the
external momenta squared, p1p2...p6p1 are the squares of external
momenta (1+2)...(6+1), respectively, p1p2p3...p3p4p5 are the external
momenta (1+2+3)...(3+4+5) squared, and m1...m6 are the masses squared."
Fput::usage =
"Fput[p1, p2, p3, p4, p5, p6, p1p2, p2p3, p3p4, p4p5, p5p6, p6p1,
p1p2p3, p2p3p4, p3p4p5, m1, m2, m3, m4, m5, m6] computes all six-point
coefficients in a future version of LoopTools."
Epsi::usage =
"Epsi[id] used inside a tensor-coefficient array allows the generated
code to address a loop integral's eps^{0,-1,-2} coefficients."
(* compatibility functions *)
B0::usage =
"B0[p, m1, m2] is the two-point one-loop scalar integral."
B1::usage =
"B1[p, m1, m2] is the coefficient of k_mu in the two-point one-loop
tensor integral B_mu."
B00::usage =
"B00[p, m1, m2] is the coefficient of g_{mu nu} in the two-point
one-loop tensor integral B_{mu nu}."
B11::usage =
"B11[p, m1, m2] is the coefficient of k_mu k_nu in the two-point
one-loop tensor integral B_{mu nu}."
B001::usage =
"B001[p, m1, m2] is the coefficient of g_{mu nu} k_rho in the two-point
one-loop tensor integral B_{mu nu rho}."
B111::usage =
"B111[p, m1, m2] is the coefficient of k_mu k_nu k_rho in the two-point
one-loop tensor integral B_{mu nu rho}."
DB0::usage =
"DB0[p, m1, m2] is the derivative of B0[p, m1, m2] with respect to p."
DB1::usage =
"DB1[p, m1, m2] is the derivative of B1[p, m1, m2] with respect to p."
DB00::usage =
"DB00[p, m1, m2] is the derivative of B00[p, m1, m2] with respect to p."
DB11::usage =
"DB11[p, m1, m2] is the derivative of B11[p, m1, m2] with respect to p."
C0::usage =
"C0[p1, p2, p1p2, m1, m2, m3] is the three-point scalar one-loop
integral."
D0::usage =
"D0[p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4] is the four-point scalar
one-loop integral."
E0::usage =
"E0[p1, p2, p3, p4, p5, p1p2, p2p3, p3p4, p4p5, p5p1, m1, m2, m3, m4,
m5] is the five-point scalar one-loop integral."
F0::usage =
"F0[p1, p2, p3, p4, p5, p6, p1p2, p2p3, p3p4, p4p5, p5p6, p6p1, p1p2p3,
p2p3p4, p3p4p5, m1, m2, m3, m4, m5, m6] is the six-point scalar one-loop
integral."
PaVe::usage =
"PaVe[ind, {pi}, {mi}] is the generalized Passarino-Veltman function
used by FeynCalc. It is converted to B0i, C0i, D0i, E0i, or F0i in
FormCalc."
ToOldBRules::usage =
"ToOldBRules is a list of rules for converting two-point functions to
the old (LoopTools 2.1) conventions."
ToNewBRules::usage =
"ToNewBRules is a list of rules for converting two-point functions to
the new (LoopTools 2.2) conventions."
EndPackage[]
(* OPP symbols *)
BeginPackage["OPP`"]
CutIntegral = Acut | Bcut | Ccut | Dcut | Ecut | Fcut
CutMasters = Amas | Bmas | Cmas | Dmas | Emas | Fmas
{Mbb, Mcc, Mdd, Mee, Mff, njcoeff}
Bcut::usage =
"Bcut[b0args][hel, r, num4, numE, k, m1, m2] is the two-point OPP
integral with numerator functions num4 (4-dim) and numE (D-4-dim), where
num4 contains r powers of the integration momentum. For vanishing hel
the coefficient is known to be zero so the integral need not be
evaluated. b0args are the same arguments as for B0, k is the external
momentum and m1, m2 are the masses squared."
Ccut::usage =
"Ccut[c0args][hel, r, num4, numE, k1, k2, m1, m2, m3] is the
three-point OPP integral with numerator functions num4 (4-dim) and numE
(D-4-dim), where num4 contains r powers of the integration momentum.
For vanishing hel the coefficient is known to be zero so the integral
need not be evaluated. c0args are the same arguments as for C0,
k1, k2 are the external momenta and m1..m3 are the masses squared."
Dcut::usage =
"Dcut[d0args][hel, r, num4, numE, k1, k2, k3, m1, m2, m3, m4] is the
four-point OPP integral with numerator functions num4 (4-dim) and numE
(D-4-dim), where num4 contains r powers of the integration momentum.
For vanishing hel the coefficient is known to be zero so the integral
need not be evaluated. d0args are the same arguments as for D0,
k1..k3 are the external momenta and m1..m4 are the masses squared."
Ecut::usage =
"Ecut[e0args][hel, r, num4, numE, k1, k2, k3, k4, m1, m2, m3, m4, m5]
is the five-point OPP integral with numerator functions num4 (4-dim)
and numE (D-4-dim), where num4 contains r powers of the integration
momentum. For vanishing hel the coefficient is known to be zero so
the integral need not be evaluated. e0args are the same arguments as
for E0, k1..k4 are the external momenta and m1..m5 are the masses
squared."
Fcut::usage =
"Fcut[f0args][hel, r, num4, numE, k1, k2, k3, k4, k5, m1, m2, m3, m4,
m5, m6] is the six-point OPP integral with numerator functions num4
(4-dim) and numE (D-4-dim), where num4 contains r powers of the
integration momentum. For vanishing hel the coefficient is known to
be zero so the integral need not be evaluated. f0args are the same
arguments as for F0, k1..k5 are the external momenta and m1..m6 are
the masses squared."
MuTildeSq::usage =
"MuTildeSq represents mu-tilde squared in the OPP calculation."
EndPackage[]
BeginPackage["Form`"]
{ MuTilde, dm4M, qfM, qcM, numM, intM, paveM, cutM, extM,
dotM, abbM, fermM, sunM, helM, powM, addM, mulM, subM,
root$$, d$$, e$$, i$$, dummy$$, g5M, g6M, g7M, dirM,
iM, sM, EiKi, njM, tnj, xnj, bnj, b0nj, b1nj, b2nj,
vTnj, v0nj, v1nj, v2nj, v3nj, v4nj }
FormLoopMomenta = {q1, q2}
FormInd = {Ind1, Ind2, Ind3, Ind4, Ind5, Ind6, Ind7, Ind8, Ind9}
EndPackage[]
(* symbols from the model files live in Global` *)
{ DiracMatrix, DiracSlash, ChiralityProjector,
DiracSpinor, MajoranaSpinor, SpinorType, DiracObject,
PolarizationVector, PolarizationTensor,
MetricTensor, FourVector, ScalarProduct,
Lorentz, Lorentz4, EpsilonScalar,
SUNT, SUNF, SUNTSum, SUNEps, Colour, Gluon }
TreeCoupling::usage =
"TreeCoupling[from -> to] calculates the tree-level contribution to
the process from -> to. TreeCoupling[..., opt] specifies options for
CreateTopologies, InsertFields, and CreateFeynAmp to be used in the
computation."
VertexFunc::usage =
"VertexFunc[from -> to] calculates the one-loop contribution to the
process from -> to. VertexFunc[..., opt] specifies options for
CreateTopologies, InsertFields, and CreateFeynAmp to be used in the
computation."
SelfEnergy::usage =
"SelfEnergy[from -> to, mass] calculates the self-energy with incoming
particle from and outgoing particle to, taken at k^2 = mass^2.
SelfEnergy[f] calculates the self-energy of particle f on its mass
shell. SelfEnergy[..., opt] specifies options for CreateTopologies,
InsertFields, and CreateFeynAmp to be used in the computation."
DSelfEnergy::usage =
"DSelfEnergy[from -> to, mass] calculates the derivative with respect to
k^2 of the self-energy with incoming particle from and outgoing particle
to, taken at k^2 = mass^2. DSelfEnergy[f] calculates the self-energy of
particle f on its mass shell. DSelfEnergy[..., opt] specifies options
for CreateTopologies, InsertFields, and CreateFeynAmp to be used in the
computation."
K2::usage =
"K2 represents the momentum squared in SelfEnergy and DSelfEnergy."
SEHook::usage =
"SEHook[se, amp, k2 -> m2] provides a hook on the final step on the
computation of (the derivative of) a self-energy. It should replace
k2 -> m2 in amp. Take care that evaluating the first argument unchanged
results in a recursion."
$RCTop::usage = $RCIns::usage = $RCAmp::usage = $RCRes::usage =
"$RCTop, $RCIns, $RCAmp, and $RCRes respectively contain the output of
CreateTopologies, InsertFields, CreateFeynAmp, and CalcFeynAmp produced
by the last call to SelfEnergy, DSelfEnergy, VertexFunc, or
TreeCoupling for inspection and debugging."
ReTilde::usage =
"ReTilde[expr] takes the real part of loop integrals occurring in expr."
ImTilde::usage =
"ImTilde[expr] takes the imaginary part of loop integrals occurring in
expr."
LVectorCoeff::usage =
"LVectorCoeff[expr] returns the coefficient of DiracChain[6, k[1]]
(= k1slash omega_-) in expr."
RVectorCoeff::usage =
"RVectorCoeff[expr] returns the coefficient of DiracChain[7, k[1]]
(= k1slash omega_+) in expr."
LScalarCoeff::usage =
"LScalarCoeff[expr] returns the coefficient of DiracChain[7] (= omega_-)
in expr."
RScalarCoeff::usage =
"RScalarCoeff[expr] returns the coefficient of DiracChain[6] (= omega_+)
in expr."
SEPart::usage =
"SEPart[p, se] returns part p of self-energy se. It is applied during
the calculation of a renormalization constant, where p is one of
LVectorCoeff, RVectorCoeff, LScalarCoeff, RScalarCoeff for fermion
self-energies, and Identity otherwise."
MassRC::usage =
"MassRC[f] computes the one-loop mass renormalization constant of field f.
MassRC[f1, f2] computes the one-loop mass renormalization constant for
the f1-f2 transition.
Field specifications of the form f @ m use mass m instead of TheMass[f].
For fermions the output is a list {left-handed RC, right-handed RC}.
MassRC[..., opt] specifies options for CreateTopologies, InsertFields,
and CreateFeynAmp to be used in the computation."
FieldRC::usage =
"FieldRC[f] computes the one-loop field renormalization constant of
field f. FieldRC[f1, f2] computes the one-loop field renormalization
constant for the f1-f2 transition. FieldRC[f1, f2, c] subtracts c from
the self-energy entering into the calculation.
Field specifications of the form f @ m use mass m instead of TheMass[f].
For fermions the output is a list {left-handed RC, right-handed RC}.
FieldRC[..., opt] specifies options for CreateTopologies, InsertFields,
and CreateFeynAmp to be used in the computation."
TadpoleRC::usage =
"TadpoleRC[f] computes the one-loop tadpole renormalization constant of
field f. TadpoleRC[..., opt] specifies options for CreateTopologies,
InsertFields, and CreateFeynAmp to be used in the computation."
WidthRC::usage =
"WidthRC[f] computes the one-loop width of field f.
A field specification of the form f @ m uses mass m instead of TheMass[f].
WidthRC[..., opt] specifies options for CreateTopologies, InsertFields,
and CreateFeynAmp to be used in the computation."
$RenConst::usage =
"$RenConst lists the functions under which renormalization constants are
given."
BeginPackage["FormCalc`",
{"FeynArts`", "LoopTools`", "OPP`", "Form`", "Global`"}]
(* some internal symbols must be visible for FORM/ReadForm *)
{ SUNSum, ReadForm, ReadFormDebug, ReadFormWrap, FormExpr, FormWrap }
(* some internal symbols made visible for debugging *)
LoopIntegral = Join[PaVeIntegral, Blank/@ CutIntegral]
{ FormKins, FormProcs, KinFunc, InvSum, PairRules,
CurrentProc, LastAmps, DenList, DenMatch,
FormSetup, ToFPlus, UnitarityDebug, SUNObjs,
DenyNoExp, DenyHide }
$Dminus4MaxPower::usage =
"$Dminus4MaxPower gives the maximum power of the Dminus4 symbol needed."
$Dminus4MaxPower = 1 (* for one-loop *)
(* symbols appearing in the output *)
Amp::usage =
"Amp[proc][expr1, expr2, ...] is the result of the calculation of
diagrams of the process proc. The result is divided into parts expr1,
expr2, ..., so that index sums (marked by SumOver) apply to the whole
of each part."
Den::usage =
"Den[p, m] stands for 1/(p - m). Note that in contrast to
PropagatorDenominator, p and m are the momentum and mass *squared*.
Den[p, m, d] is the denominator raised to the power d."
Num::usage =
"Num[expr] contains the numerator of a loop integral as a function of
the loop momentum. This representation is used when calculating loop
integrals by the OPP packages."
DiracChain::usage =
"DiracChain[objs] is a chain of Dirac matrices contracted with the given
objects. The integers 1, 5, 6, and 7 appearing as first argument denote
1, gamma_5, (1 + gamma_5)/2, and (1 - gamma_5)/2, respectively."
WeylChain::usage =
"WeylChain[objs] is a chain of sigma matrices contracted with the given
objects. The integers 6, 7 respectively denote upper and lower indices
at the given position, and -1 stands for epsilon, the spinor metric."
Spinor::usage =
"Spinor[p, m, s] is a spinor with momentum p and mass m, i.e. a solution
of the Dirac equation (pslash + s m) Spinor[p, m, s] = 0. On screen,
particle spinors (s = 1) are printed as u[p, m], antiparticle spinors
(s = -1) as v[p, m].
Inside a WeylChain, Spinor denotes a 2-component Weyl spinor and has two
additional arguments: Spinor[p, m, s, d, e]. An undotted spinor has
d = 1, a dotted d = 2; e indicates contraction with the spinor metric.
Whether it corresponds to the upper or lower half of the 4-component
Dirac spinor is determined by the index convention of the WeylChain
(fixed by arguments 6 or 7), propagated to the position of the spinor."
e::usage =
"e[i] is the ith polarization vector."
ec::usage =
"ec[i] is the conjugate of the ith polarization vector."
z::usage =
"z[i] is the ith polarization vector in D - 4 dimensions."
zc::usage =
"zc[i] is the conjugate of the ith polarization vector in D - 4
dimensions."
Pol::usage =
"Pol[e[i], mu, nu] is the polarization tensor of external particle i.
Pol[ec[i], mu, nu] is its conjugate.
Pol[e1, e2, ..., mu, nu] denotes the product tensor e1*e2*... with
overall tensor indices mu and nu and Pol[..., 0, 0] its trace.
The default assumption is that the polarization tensor factorizes into
two polarization vectors, which is a specific choice for massless
particles, and can be turned off with Clear[Pol]."
k::usage =
"k[i] is the ith momentum."
nul::usage =
"nul is the zero vector. It is kept only inside IGram to trace singular
Gram determinants."
SUNN::usage =
"SUNN specifies the N in SU(N), i.e. the number of colours."
S::usage =
"S is the Mandelstam variable s. If k1 and k2 are the incoming momenta,
S = (k1 + k2)^2 = S12."
T::usage =
"T is the Mandelstam variable t. If k1 denotes the first incoming and
k3 the first outgoing momentum, T = (k1 - k3)^2 = T13."
U::usage =
"U is the Mandelstam variable u. If k2 denotes the first incoming and
k3 the second outgoing momentum, U = (k2 - k3)^2 = T23."
Dminus4::usage =
"Dminus4 represents the difference D - 4."
Dminus4Eps::usage =
"Dminus4Eps represents the Dminus4 arising from the contraction of
Levi-Civita tensors in HelicityME and PolarizationSum. Choosing it
different from Dminus4 is not particularly consistent and used for
checking results only."
Dminus4Eps = Dminus4
IGram::usage =
"IGram[expr] contains the denominator arising from the reduction of a
tensor-coefficient function. It is equivalent to 1/expr but is kept
separate for further simplification."
PowerOf::usage =
"PowerOf is an auxiliary function with the help of which it is easy
to split the amplitude into monomials in the couplings constants.
To this end, subject the FeynArts amplitude to the substitution
g -> g PowerOf[g] for all coupling constants g. Each element
the Amp returned by CalcFeynAmp contains a single PowerOf only,
from which the power in the coupling constants can be read off."
(* ToFeynAmp, DeclareProcess, CalcFeynAmp and their options *)
ToFeynAmp::usage =
"ToFeynAmp[amps] converts hand-typed amplitudes into (approximate)
FeynArts conventions so that the amplitude can be processed by
DeclareProcess and CalcFeynAmp."
DeclareProcess::usage =
"DeclareProcess[amps] sets up internal definitions for the computation
of the amplitudes amps."
OnShell::usage =
"OnShell is an option of DeclareProcess. It specifies whether FORM
should put the external particles on their mass shell, i.e. apply
ki^2 = mi^2. The special value ExceptDirac omits application of the
Dirac equation to on-shell momenta."
ExceptDirac::usage =
"ExceptDirac is a possible value for the OnShell option of DeclareProcess.
It omits application of the Dirac equation to on-shell momenta."
Invariants::usage =
"Invariants is an option of DeclareProcess. It specifies whether FORM
should introduce kinematical invariants, like the Mandelstam variables
for a 2 -> 2 process."
Transverse::usage =
"Transverse is an option of DeclareProcess. It specifies whether FORM
should apply the transversality relations for polarization vectors
(ei.ki = 0)."
Normalized::usage =
"Normalized is an option of DeclareProcess. It specifies whether FORM
should apply the normalization of polarization vectors (ei.ei^* = -1)."
InvSimplify::usage =
"InvSimplify is an option of DeclareProcess. It specifies whether FORM
should try to simplify combinations of invariants as much as possible."
MomElim::usage =
"MomElim is an option of DeclareProcess. It controls in which way
momentum conservation is used to eliminate momenta. False performs no
elimination, an integer between 1 and the number of legs substitutes
the specified momentum in favour of the others, and Automatic tries all
substitutions and chooses the one resulting in the fewest terms."
DotExpand::usage =
"DotExpand is an option of DeclareProcess. It controls whether the
terms collected for momentum elimination are expanded again. This
prevents kinematical invariants from appearing in the abbreviations but
typically leads to poorer simplification of the amplitude."
Antisymmetrize::usage =
"Antisymmetrize is an option of DeclareProcess. It specifies whether
Dirac chains are antisymmetrized."
FormAmp::usage =
"FormAmp[proc][amps] contains a preprocessed form of the FeynArts
amplitudes amps for process proc, to be calculated by CalcFeynAmp."
CalcFeynAmp::usage =
"CalcFeynAmp[amps] calculates the Feynman amplitudes given in amps. The
resulting expression is broken up into categories which are returned in
an Amp object."
CalcLevel::usage =
"CalcLevel is an option of CalcFeynAmp. It specifies the level (Classes
or Particles) at which to calculate the amplitudes. Automatic takes
Classes level, if available, otherwise Particles."
Dimension::usage =
"Dimension is an option of CalcFeynAmp, HelicityME, and PolarizationSum.
It specifies the space-time dimension in which to perform the
calculation and can take the values D, where dimensional regularization
is used, and 4, where constrained differential renormalization is used.
The latter method is equivalent to dimensional reduction at the one-loop
level. Dimension -> 0 retains the Dminus4 terms, i.e. does not emit
local (rational) terms."
NoCostly::usage =
"NoCostly is an option of CalcFeynAmp. Useful for 'tough' amplitudes,
NoCostly -> True turns off potentially time-consuming transformations
in FORM."
FermionChains::usage =
"FermionChains is an option of CalcFeynAmp. It can take the three
values Chiral, VA, and Weyl, which specify how fermion chains are
returned by CalcFeynAmp. Chiral and VA both select (4-dimensional)
Dirac chains, where the chiral decomposition is taken for Chiral and the
vector/axial-vector decomposition for VA. Weyl selects (2-dimensional)
Weyl chains."
Chiral::usage =
"Chiral is a possible value for the FermionChains option of CalcFeynAmp.
It instructs CalcFeynAmp to return fermion chains as left- and
right-handed (4-dimensional) Dirac chains."
VA::usage =
"VA is a possible value for the FermionChains option of CalcFeynAmp.
It instructs CalcFeynAmp to return fermion chains as vector and
axial-vector parts of (4-dimensional) Dirac chains."
Weyl::usage =
"Weyl is a possible value for the FermionChains option of CalcFeynAmp.
It instructs CalcFeynAmp to return fermion chains as (2-dimensional)
Weyl chains."
FermionOrder::usage =
"FermionOrder is an option of CalcFeynAmp.
For Dirac spinor chains (FermionChains -> Chiral or VA) it determines
the ordering of the external fermions within the chains. Choices are
None, Fierz, Automatic, Colour, or an explicit ordering, e.g. {2,1,4,3}.
None applies no reordering. Fierz applies the Fierz identities twice,
thus simplifying the chains but keeping the original order. Colour
applies the ordering of the external colour indices to the spinors.
Automatic chooses a lexicographical ordering.
For Weyl spinor chains (FermionChains -> Weyl) it determines the
structuring of the amplitude with respect to the fermion chains:
Setting FermionOrder -> Mat wraps the Weyl fermion chains in Mat, too,
so that they end up at the outermost level of the amplitude and their
coefficients can be read off easily."
Fierz::usage =
"Fierz is a possible value for the FermionOrder option of CalcFeynAmp.
It instructs CalcFeynAmp to apply the Fierz identities twice, thus
simplifying the chains but keeping the original spinor order."
Colour::usage =
"Colour is a possible value for the FermionOrder option of CalcFeynAmp.
It instructs CalcFeynAmp to bring the spinors into the same order as the
external colour indices, i.e. \"Fermion flow follows colour flow\"."
Evanescent::usage =
"Evanescent is an option of CalcFeynAmp. It introduces factors
of the form Evanescent[original operator, Fierzed operator]
with the help of which one can detect problems due to the application
of the Fierz identities."
InsertionPolicy::usage =
"InsertionPolicy is an option of CalcFeynAmp. Begin specifies that the
insertions shall be applied at the beginning of the FORM code (this
ensures that all loop integrals are fully symmetrized). Default applies
them after simplifying the generic amplitudes (this is fastest). A
positive integer does the same, except that insertions with a LeafCount
larger than that integer are inserted only after the amplitude comes
back from FORM (this is a workaround for the rare cases where the FORM
code aborts due to very long insertions)."
KeepTensors::usage =
"KeepTensors is an option of CalcFeynAmp. It controls whether loop
integrals are kept in an unreduced form. Tensor reduction is available
in FormCalc for one-loop integrals only."
VectorMoms::usage =
"VectorMoms is an option of CalcFeynAmp. It controls whether loop
integrals are returned with vectors (True) or invariants (False) for
their momentum arguments. Only the latter kind is available in
LoopTools, however."
PaVeReduce::usage =
"PaVeReduce is an option of CalcFeynAmp. False retains the one-loop
tensor-coefficient functions. LoopTools reduces all tensors not
available in LoopTools. True and Raw both reduce the tensors all the
way down to scalar integrals but Raw keeps the Gram determinants in
the denominator in terms of dot products while True simplifies them
using invariants."
LoopTools::usage =
"LoopTools is a value for the PaVeReduce option of CalcFeynAmp.
It specifies that only the tensor-coefficient functions not available
in LoopTools are reduced."
SortDen::usage =
"SortDen is an option of CalcFeynAmp. It determines whether the
denominators of loop integrals shall be sorted. This is usually done to
reduce the number of loop integrals appearing in an amplitude."
CancelQ2::usage =
"CancelQ2 is an option of CalcFeynAmp. It controls cancellation of
terms involving the integration momentum squared. If set to True,
powers of q1.q1 in the numerator are cancelled by a denominator, except
for OPP integrals, where the denominators are controlled by the
CombineDen option."
CombineDen::usage =
"CombineDen is an option of CalcFeynAmp. It determines whether to
combine OPP integrals with common denominators, as in:
N2/(D0 D1) + N3/(D0 D1 D2) -> (N2 D2 + N3)/(D0 D1 D2).
True/False turns combining integrals on/off, Automatic combines integrals
only if the rank of the combined numerator is not larger than the sum
of the individual numerator ranks (which is faster)."
OPP::usage =
"OPP is an option of CalcFeynAmp. It specifies an integer N starting
from which an N-point function is treated with OPP methods. For
example, OPP -> 4 means that A, B, C functions are reduced with
Passarino-Veltman and D and up with OPP."
OPPMethod::usage =
"OPPMethod is an option of CalcFeynAmp. It can take the values NumRat,
AnaRat, or Ninja, which determine how OPP integrals are treated:
NumRat assumes that the OPP library will numerically reconstruct the
rational terms and to this end provides it with the (D-4)-dimensional
part of the numerator. AnaRat adds the rational terms analytically and
thus zeroes the (D-4)-dimensional part of the numerator. Ninja applies
the Ninja expansion to the numerators."
NumRat::usage =
"NumRat is a possible value for the CalcFeynAmp option OPPMethod.
It arranges for numerical evaluation of the rational terms by the OPP
library, by providing the (D-4)-dimensional part of the numerator as
the second argument to the numerator function."
AnaRat::usage =
"AnaRat is a possible value for the CalcFeynAmp option OPPMethod.
It arranges for analytical calculation of the rational terms and
consequently provides the OPP library with the (D-4)-dimensional part
of the numerator (second argument of the numerator function) set to
zero."
Ninja::usage =
"Ninja is a possible value for the CalcFeynAmp option OPPMethod.
It arranges for evaluation of the loop integrals with the Ninja library
by applying the Ninja expansion to the numerators."
OPPQSlash::usage =
"OPPQSlash is an option of CalcFeynAmp. While the integration momentum
q1 is conceptually a D-dimensional object, it may be be treated
4-dimensionally in OPP because the numerator function actually computes
q1.q1 - MuTildeSq for every q1.q1 and the OPP libraries can reconstruct
the rational terms from the dimensionful scale MuTildeSq.
OPPQSlash extends this treatment to the q1-slash on external fermion
chains, i.e. also substitutes q1-slash -> q1-slash + I gamma_5 MuTilde,
where odd powers of MuTilde are eventually set to zero."
Gamma5Test::usage =
"Gamma5Test is an option of CalcFeynAmp. If set to True, each gamma_5
is multiplied by (1 + Gamma5Test (D - 4)) and the dependence on
Gamma5Test in the final result should vanish."
Gamma5ToEps::usage =
"Gamma5ToEps is an option of CalcFeynAmp. It controls substitution of
gamma_5 by 1/24 eps^{mu nu ro si} gamma_mu gamma_nu gamma_ro gamma_si
in fermion traces."
NoExpand::usage =
"NoExpand is an option of CalcFeynAmp. NoExpand -> {sym1, sym2, ...}
specifies that sums containing any of sym1, sym2, ... are not expanded
during the FORM calculation."
NoBracket::usage =
"NoBracket is an option of CalcFeynAmp and PolarizationSum.
NoBracket -> {sym1, sym2, ...} specifies that sym1, sym2, ... are not
collected inside a multiplication bracket during the FORM calculation."
MomRules::usage =
"MomRules is an option of CalcFeynAmp. It specifies a set of rules
for transforming momenta. The notation is that of the final amplitude,
i.e. k1,...,kn for the momenta, e1,...,en for the polarization vectors."
PreFunction::usage =
"PreFunction is an option of CalcFeynAmp. It specifies a function to be
applied to each amplitude before any simplification is made. This
option is typically used to apply a function to all amplitudes in a
calculation, even in indirect calls to CalcFeynAmp, such as through
CalcRenConst."
PostFunction::usage =
"PostFunction is an option of CalcFeynAmp. It specifies a function to
be applied to each amplitude after all simplifications have been made.
This option is typically used to apply a function to all amplitudes in a
calculation, even in indirect calls to CalcFeynAmp, such as through
CalcRenConst."
FileTag::usage =
"FileTag is an option of CalcFeynAmp. It specifies the middle part of
the name of the FORM file, as in fc-TAG-1.frm."
EditCode::usage =
"EditCode is a debugging option of CalcFeynAmp, HelicityME, and
PolarizationSum. It determines editing of the intermediate FORM code.
True invokes the $Editor command, which is supposed to detach from
FormCalc, i.e. the FORM process continues with the unedited code.
Modal invokes the $EditorModal command, which is supposed to be
modal (non-detached), i.e. continues only after the editor is closed,
thus continuing with possibly modified FORM code."
RetainFile::usage =
"RetainFile is a debugging option of CalcFeynAmp, HelicityME, and
PolarizationSum. When set to True, the temporary file containing the
FORM code is not removed after running FORM."
(* abbreviationing-related functions *)
Abbr::usage =
"Abbr[] returns a list of all abbreviations introduced so far.
Abbr[patt] returns a list of all abbreviations including the pattern
patt. Patterns prefixed by ! (Not) are excluded."
Unabbr::usage =
"Unabbr[expr] expands all abbreviations and subexpressions in expr.
Unabbr[expr, patt] expands only those free of patt.
Unabbr[expr, !f [, patt]] does not expand inside objects that match f."
UnAbbr = Unabbr
GenericList::usage =
"GenericList[] returns a list of the substitutions made for the
computation of generic amplitudes."
ClearProcess::usage =
"ClearProcess[] is necessary to clear internal definitions before
calculating a process with a different kinematical set-up."
ZapFunction::usage =
"ZapFunction is an option of ClearProcess and ClearSubexpr and
determines the function used to clear the definitions of symbols
introduced for abbreviations."
RegisterAbbr::usage =
"RegisterAbbr[abbr] registers a list of abbreviations so that
future invocations of CalcFeynAmp will make use of them. Note that
abbreviations introduced for different processes are in general not
compatible."
Abbreviate::usage =
"Abbreviate[expr, f] introduces abbreviations for subexpressions
in expr. If f is an integer, abbreviations are introduced for sums
from level f downward. Otherwise, f is taken as a function where
f[subexpr] is invoked for the subexpressions of expr and returns
True if an abbreviation shall be introduced for it, False if not,
or the part of subexpr for which an abbreviation shall be introduced."
AbbrevSet::usage =
"AbbrevSet[expr] sets up the AbbrevDo function that introduces
abbreviations for subexpressions. The expression given here is not
itself abbreviated but used for determining the summation indices."
AbbrevDo::usage =
"AbbrevDo[expr, lev], where lev is an integer, introduces abbreviations
for subexpressions appearing at level lev of expr or deeper.
AbbrevDo[expr, fun], where fun is a function, introduces abbreviations
for all subexpressions of expr for which fun[subexpr] returns True.
AbbrevDo must first be defined by AbbrevSet."
Deny::usage =
"Deny is an option of Abbreviate. It specifies items which must not be
included in abbreviations."
Fuse::usage =
"Fuse is an option of Abbreviate. It specifies whether adjacent items
for which the selection function is True should be fused into one
abbreviation."
Preprocess::usage =
"Preprocess is an option of Abbreviate. It specifies a function to be
applied to all subexpressions before introducing abbreviations for
them."
$AbbPrefix::usage =
"$AbbPrefix specifies the prefix for subexpressions introduced by
Abbreviate, i.e. the Sub in Sub123."
Subexpr::usage =
"Subexpr[] returns a list of all subexpressions introduced by
Abbreviate.
Subexpr[args] executes Abbreviate[args] locally, i.e. without
registering the subexpressions permanently and returns a list of the
form {Subexpr[], Abbreviate[args]}."
SubExpr = Subexpr
ClearSubexpr::usage =
"ClearSubexpr[] clears the internal definitions of the subexpressions
introduced by Abbreviate."
RegisterSubexpr::usage =
"RegisterSubexpr[subexpr] registers a list of subexpressions so that
future invocations of Abbreviate will make use of them."
OptimizeAbbr::usage =
"OptimizeAbbr[abbr, simp] optimizes the abbreviations in abbr by
eliminating common subexpressions. The function simp is applied to
new abbreviations introduced for common subexpressions and defaults
to Simplify."
$OptPrefix::usage =
"$OptPrefix specifies the prefix for additional abbreviations introduced
by OptimizeAbbr, i.e. the Opt in Opt123."
SubstAbbr::usage =
"SubstAbbr[exprlist, patt] removes abbreviations matching patt and
substitutes them back into exprlist.
SubstAbbr[exprlist, patt, deny] does not substitute variables matching deny."
SubstSimpleAbbr::usage =
"SubstSimpleAbbr[exprlist] removes (substitutes back) abbreviations which
match P$SimpleAbbr.
SubstSimpleAbbr[exprlist, deny] does not substitute variables matching deny."
P$SimpleAbbr::usage =
"P$SimpleAbbr is a pattern which matches a `simple' abbreviation of the
form var -> s where s is a number or a symbol times a number."
ExtractInt::usage =
"ExtractInt[expr] extracts the loop integrals from expr for evaluation
with LoopTools/OPP. It output is a list {loopint, abbrexpr}, where
loopint is the list of loop integrals and abbrexpr is expr with the
loop integrals substituted by the variables on the l.h.s. of loopint."
VarSort::usage =
"VarSort[list] sorts the list of variable definitions (var -> val),
taking into account explicit priorities (var -> Prio[p][val]) and the
running numbers of variable names, e.g. abb100 is sorted after abb11."
Prio::usage =
"var -> Prio[p][val] tells VarSort that the definition var -> val is to
be sorted with priority p, i.e. after definitions with priority p - 1 and
before definitions with priority p + 1, where 100 is the default priority.
VarSort strips the Prio[p] part from the definition."
Pair::usage =
"Pair[a, b] represents the contraction of the two four-vectors or
Lorentz indices a and b."
Eps::usage =
"Eps[a, b, c, d] represents -I times the antisymmetric Levi-Civita
tensor epsilon_{abcd}. The sign convention is epsilon^{0123} = +1."
ToSymbol::usage =
"ToSymbol[s...] concatenates its arguments into a new symbol."
NewSymbol::usage =
"NewSymbol[stub, 0] creates a new symbol of the form stubN, where
N is the integer SymbolNumber[stub] + 1.
NewSymbol[stub] furthermore guarantees that stubN is presently not
used elsewhere by increasing N as necessary."
SymbolNumber::usage =
"SymbolNumber[stub] gives the running number last used for creating
a new symbol with prefix stub."
ToArray::usage =
"ToArray[s] turns the symbol s into an array reference by taking it
apart into letters and digits, e.g. Var1234 becomes Var[1234].
ToArray[expr, s1, s2, ...] turns all occurrences of the symbols s1NNN,
s2NNN, etc. in expr into s1[NNN], s2[NNN], etc."
ToArrayRules::usage =
"ToArrayRules[expr, vars] gives the rules used for the substitution
in ToArray[expr, vars]."
Renumber::usage =