2
2
Analytic.m
3
3
Translation of InsertFields output into
4
4
analytic expressions
5
- last modified 28 Mar 11 th
5
+ last modified 8 Oct 12 th
6
6
*)
7
7
8
8
Begin ["`Analytic`" ]
12
12
GaugeRules -> {_ GaugeXi -> 1 },
13
13
PreFactor -> - I (2 Pi )^ (- 4 LoopNumber ),
14
14
Truncated -> False ,
15
- MomentumConservation -> True
15
+ MomentumConservation -> True ,
16
+ GraphInfoFunction -> (1 & )
16
17
}
17
18
18
19
(* for D dimensions use
54
55
CreateFeynAmp [ TopologyList [][tops ], opt ]
55
56
56
57
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 ]},
59
60
60
61
If [ (alevel = ResolveLevel [AmplitudeLevel /. opt /. {info } /.
61
62
Options [InsertFields ]]) === $Failed ,
73
74
gaugeru = GaugeRules /. opt ;
74
75
truncru = If [ TrueQ [Truncated /. opt ], M$TruncationRules , {} ];
75
76
momcons = TrueQ [MomentumConservation /. opt ];
77
+ graphinfo = GraphInfoFunction /. opt ;
78
+ toplist = TopologyList [info ];
76
79
77
80
amps = PickLevel [alevel ][tops ];
78
81
Scan [ If [FreeQ [amps , # ], Message [CreateFeynAmp ::nolevel , # ]]& , alevel ];
85
88
86
89
head = FeynAmpList [info ] /.
87
90
(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 }]) /.
89
93
(InsertionLevel -> _ ) :> (AmplitudeLevel -> alevel );
90
94
91
95
amps = head @@ amps /. _ MTF -> 1 /. gaugeru //. M$LastModelRules ;
124
128
];
125
129
(* renumber the internal momenta *)
126
130
oldmom = Union [ Cases [momtop , FourMomentum [_ ZZZ , _ ], Infinity ] ];
127
- imom = Apply [ RenumberMom , oldmom , 1 ] ;
131
+ imom = RenumberMom @@@ oldmom ;
128
132
momtop = momtop /. Thread [oldmom -> imom ];
129
133
130
134
toppref = pref /. LoopNumber :> Genus [top ];
@@ -226,7 +230,7 @@ Since momenta on tree propagators (Propagator[Internal])
226
230
rawgm = gm /.
227
231
s1_ . _ [__ , orig [s2_ , fi_ ], k___ ] :>
228
232
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 ] /.
230
234
orig [__ ] :> Seq []
231
235
]
232
236
@@ -514,10 +518,11 @@ need another (-1)^(Length[ext]/2).
514
518
SumOver [i , l , ext ] /; r === Range [l ]
515
519
516
520
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
519
524
520
- CreateAmpIns [ gm_ , sgen_ , gr :FeynmanGraph [s_ , ___ ][ru__ ] ] :=
525
+ CreateAmpIns [ top_ , gm_ , sgen_ , gr :FeynmanGraph [s_ , ___ ][ru__ ] ] :=
521
526
Block [ {ext , int , ins , deltas },
522
527
ins = ReplacePart [gm , sgen / s , - 1 ] /. {ru } /.
523
528
anti -> AntiParticle /.
@@ -530,6 +535,7 @@ need another (-1)^(Length[ext]/2).
530
535
ext = Union [Cases [Take [{ru }, next ], _ Index , Infinity ]];
531
536
int = Complement [Cases [Drop [{ru }, next ], _ Index , Infinity ], ext ];
532
537
ins [[- 1 ]] * =
538
+ graphinfo [FeynmanGraph [ru ], top , toplist ] *
533
539
Times @@ deltas *
534
540
Times @@ (SumOver [# , IndexRange [Take [# , 1 ]], External ]& )/@ ext *
535
541
Times @@ (SumOver [# , IndexRange [Take [# , 1 ]]]& )/@ int ;
@@ -554,7 +560,7 @@ kinematical expression (for a G[-]). If neither method resolves TheC,
554
560
ferm = Cases [vert , _ . _ F ];
555
561
vert = vert [[perm ]];
556
562
kin = k /. MapIndexed [KinRule , perm ];
557
- If [ ferm =!= Cases [vert , _ . _ F ],
563
+ If [ Length [ M$FlippingRules ] > 0 && ferm =!= Cases [vert , _ . _ F ],
558
564
If [ Length [ferm ] > 2 , Message [CreateFeynAmp ::ambig , vert ] ];
559
565
kin = kin /. M$FlippingRules ];
560
566
0 commit comments