option FAGenStart=[
	'(*',
	' This file is derived from:',
	'	Lorentz.gen',
	'		Generic model file for the Lorentz formalism',
	'		by A. Denner, H. Eck, O. Hahn, S. Kueblbeck 1995',
	'		last modified 4 Dec 02 by Thomas Hahn',
	0,
	'  Generic couplings are regenerated by LanHEP',
	0,
	'This file defines the generic analytical propagators and couplings.',
	'The model described herein is the standard generic model of renormalizable',
	'field theories (11 generic couplings) with 3 additional 2-vertices.',
	0,
	'Reference:',
	'	A. Denner, "Techniques for the calculation of electroweak',
	'	radiative corrections at the one-loop level and results for',
	'	W-physics at LEP200", Fortschr. d. Physik 41 (1993) 4',
	'*)',
	0,
	'	(* Kinematic indices are "transported" along a propagator line.',
	'	   KinematicIndices[X] = {Name} means that the generic field X',
	'	   will carry an index Index[Name, i] along the line:  ',
	'	   X[ n, {m..}, p, {Index[Name, i]} -> {Index[Name, i + 1]} ] *)',
	0,
	'KinematicIndices[ F ] = {};',
	'KinematicIndices[ V ] = {Lorentz};',
	'KinematicIndices[ S ] = {};',
	'KinematicIndices[ SV ] = {Lorentz};',
	'KinematicIndices[ U ] = {}',
	0,
	0,
	'Attributes[ MetricTensor ] = Attributes[ ScalarProduct ] = {Orderless}',
	0,
	0,
	'FourVector/: -FourVector[ mom_, mu_ ] := FourVector[Expand[-mom], mu]',
	0,
	'FourVector[ 0, _ ] = 0',
	0,
	0,
	'SpinorType[j_Integer, ___] := MajoranaSpinor /; SelfConjugate[F[j]]',
	0,
	'SpinorType[_Integer, __] = DiracSpinor',
	0,
	0,
	'M$GenericPropagators = {',
	0,
	'	(* general fermion propagator: *)',
	0,
	'  AnalyticalPropagator[External][ s1 F[j1, mom] ] == ',
	'    NonCommutative[ SpinorType[j1][-mom, Mass[F[j1]]] ],',
	0,
	'	(* Remarks:',
	'	   Fermionic propagators have (like all others, too) their',
	'	   momentum flowing from left to right. The fermion flow (for',
	'	   Dirac fermions: fermion number flow) is from right to left.',
	'	   If the fermion inside the propagator has no sign (i.e. fermion',
	'	   number flow is opposite to fermion flow or fermion is self',
	'	   conjugate) we just use the internal propagator S(-p).',
	'	   If the fermion has a sign, we have to use the Feynman rule S(p)',
	'	   according to the Majorana paper. However, this rule is given',
	'	   for a momentum flowing against the fermion flow so, again, we',
	'	   end up with S(-p). *)',
	0,
	'  AnalyticalPropagator[Internal][ s1 F[j1, mom] ] ==',
	'    NonCommutative[ DiracSlash[-mom] + Mass[F[j1]] ] *',
	'      I PropagatorDenominator[mom, Mass[F[j1]]], ',
	0,
	'	(* general vector boson propagator: *)',
	0,
	'  AnalyticalPropagator[External][ s1 V[j1, mom, {li2}] ] ==',
	'    PolarizationVector[V[j1], mom, li2],',
	0,
	'  AnalyticalPropagator[Internal][ s1 V[j1, mom, {li1} -> {li2}] ] ==',
	'    -I PropagatorDenominator[mom, Mass[V[j1]]] *',
	'      (MetricTensor[li1, li2] - (1 - GaugeXi[V[j1]]) *',
	'         FourVector[mom, li1] FourVector[mom, li2] *',
	'         PropagatorDenominator[mom, Sqrt[GaugeXi[V[j1]]] Mass[V[j1]]]),',
	0,
	'	(* general mixing scalar-vector propagator: *)',
	0,
	'  AnalyticalPropagator[Internal][ s1 SV[j1, mom, {li1} -> {li2}] ] == ',
	'    I Mass[SV[j1]] PropagatorDenominator[mom, Mass[SV[j1]]] *',
	'      FourVector[mom, If[s1 == 1 || s1 == -2, li1, li2]],',
	0,
	'	(* general scalar propagator: *)',
	0,
	'  AnalyticalPropagator[External][ s1 S[j1, mom] ] == 1,',
	0,
	'  AnalyticalPropagator[Internal][ s1 S[j1, mom] ] ==',
	'    I PropagatorDenominator[mom, Sqrt[GaugeXi[S[j1]]] Mass[S[j1]]],',
	0,
	'	(* general Fadeev-Popov ghost propagator: *)',
	0,
	'  AnalyticalPropagator[External][ s1 U[j1, mom] ] == 1,',
	0,
	'  AnalyticalPropagator[Internal][ s1 U[j1, mom] ] ==',
	'    I Sqrt[GaugeXi[U[j1]]] *',
	'       PropagatorDenominator[mom, Sqrt[GaugeXi[U[j1]]] Mass[U[j1]]]',
	' } ',
	0].
	
option FAGenEnd=[
	0,
	'	(* FlippingRules: the flipping rules determines how Dirac',
	'	   objects change when the order of fermion fields in the',
	'	   coupling is reversed. In other words, it defines how the',
	'	   coupling C[F, -F, ...] is derived from C[-F, F, ...].',
	'	   Of the elements of the Dirac algebra we need to consider',
	'	   only gamma_mu omega_pm since the others are either',
	'	   unchanged or not used (sigma_{mu,nu}).',
	'	   See Denner, Eck, Hahn, Kueblbeck, NPB 387 (1992) 467. *)',
	0,
	'M$FlippingRules =',
	'  NonCommutative[dm:_DiracMatrix | _DiracSlash, ChiralityProjector[pm_]] ->',
	'    -NonCommutative[dm, ChiralityProjector[-pm]]',
	0,
	'	(* TruncationRules: rule for omitting the wave functions of',
	'	   external Propagators defined in this file. *)',
	0,
	'M$TruncationRules = {',
	'  _PolarizationVector -> 1,',
	'  _DiracSpinor -> 1,',
	'  _MajoranaSpinor -> 1 ',
	' } ',
	0,
	'	(* LastGenericRules: the very last rules that are applied to an',
	'	   amplitude before it is returned by CreateFeynAmp. *)',
	0,
	'M$LastGenericRules = {',
	'  PolarizationVector[p_, _. mom:FourMomentum[Outgoing, _], li_] :>',
	'    Conjugate[PolarizationVector][p, mom, li]',
	' } ',
	0,
	0,
	'	(* cosmetics: *)',
	0,
	'	(*  left spinor in chain + mom incoming -> \bar v',
	'	    left spinor in chain + mom outgoing -> \bar u',
	'	   right spinor in chain + mom incoming -> u',
	'	   right spinor in chain + mom outgoing -> v *)',
	'Format[',
	'  FermionChain[',
	'    NonCommutative[_[s1_. mom1_, mass1_]],',
	'    r___,',
	'    NonCommutative[_[s2_. mom2_, mass2_]]] ] :=',
	'  Overscript[If[FreeQ[mom1, Incoming], "u", "v"], "_"][mom1, mass1] .',
	'    r . If[FreeQ[mom2, Outgoing], "u", "v"][mom2, mass2]',
	0,
	'Format[ DiracSlash ] = "gs"',
	0,
	'Format[ DiracMatrix ] = "ga"',
	0,
	'Format[ ChiralityProjector[1] ] = SequenceForm["om", Subscript["+"]]',
	0,
	'Format[ ChiralityProjector[-1] ] = SequenceForm["om", Subscript["-"]]',
	0,
	'Format[ GaugeXi[a_] ] := SequenceForm["xi", Subscript[a]]',
	0,
	'Format[ PolarizationVector ] = "ep"',
	0,
	'Unprotect[Conjugate];',
	'Format[ Conjugate[a_] ] = SequenceForm[a, Superscript["*"]];',
	'Protect[Conjugate]',
	0,
	'Format[ MetricTensor ] = "g"',
	0,
	'Format[ ScalarProduct[a__] ] := Dot[a]',
	0,
	'Format[ FourVector[a_, b_] ] := a[b]',
	0].


fa_gencpl( [vector, vector]-[
	[delta(li1, li2),  delta(mom1, mom2)] + $(_),
	[delta(li1, li2)]+ $(_) ,
	[delta(li2, mom1), delta(li1, mom2)] + $(_) ]).
	
fa_gencpl( [scalar, vector]-[
	[delta(li2, mom1)]+ $(_),
	[delta(li2, mom2)]+ $(_)] ).
	
fa_gencpl( [scalar, scalar]-[
	[delta(mom1, mom2)]+ $(_),
	$(_) + $(_)
	]).

fa_gencpl( [grasman, grasman, vector]-[
	[delta(li3, mom1)]+ $(_),
	[delta(li3, mom2)]+ $(_)]).
/*
fa_gencpl( [spinor, spinor, vector]-[ 
        $(_)+[gamma(li3), '(1-gamma5)/2'],
        $(_)+[gamma(li3), '(1+gamma5)/2']] ).

*/
