
(* description = "ee -> llv+jets|ee -> llv+jets|ee -> lla|Dilepton (e+e-,m+m-,nn~) plus photon production in e+e- at NLO EW and NLO QED." *)

SelectInterference = {gQCD -> 0};


qed1 = {
  InsertFieldsOptions -> {Restrictions -> {ExcludeParticles -> {V[3],U[3],S[3]}, NoQuarkMixing}},
  SelectLoopDiagrams -> ( Not[ContainsFermionLoop[##] && NLegsOnLoop[2][##]] && ParticlesInLoop[V[1]][##]  &),
  QED -> 1,
  SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]
  };

qed2 = {
  InsertFieldsOptions -> {Restrictions -> {ExcludeParticles -> {V[2|3],U,S}, NoQuarkMixing}},
  SelectLoopDiagrams -> ( Not[ContainsFermionLoop[##] && NLegsOnLoop[2][##]] && ParticlesInLoop[V[1]][##]  &),
  QED -> 2,
  SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]
};



(* NLO EW *)

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexllxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* nenexeexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nlnlxeexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{3}], -F[1,{3}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexllxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];



(* SM + NLO QED *)

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1]}, UnitaryGauge -> False, Sequence @@ qed1];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1]}, UnitaryGauge -> False, Sequence @@ qed1];
(* eexllxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1]}, UnitaryGauge -> False, Sequence @@ qed1];

(* nmnmxeexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1]}, UnitaryGauge -> False, Sequence @@ qed1];
(* nlnlxeexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{3}], -F[1,{3}], V[1]}, UnitaryGauge -> False, Sequence @@ qed1];


(* Photon + NLO QED *)

(* eeexexa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1]}, UnitaryGauge -> False, Sequence @@ qed2];
(* eexmmxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1]}, UnitaryGauge -> False, Sequence @@ qed2];
(* eexllxa *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1]}, UnitaryGauge -> False, Sequence @@ qed2];


(* Reals *)

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1], V[1]}];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1], V[1]}];
(* eexllxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1], V[1]}];

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1], V[1]}];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1], V[1]}];

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexllxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];


(* nenexeexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}], -F[1,{1}], V[1], V[1]}];
(* nmnmxeexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1], V[1]}];
(* nlnlxeexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{3}], -F[1,{3}], V[1], V[1]}];

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1], V[1]}, Sequence @@ qed1];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1], V[1]}, Sequence @@ qed1];
(* eexllxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1], V[1]}, Sequence @@ qed1];

(* eeexexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1], V[1]}, Sequence @@ qed2];
(* eexmmxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1], V[1]}, Sequence @@ qed2];
(* eexllxaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1], V[1]}, Sequence @@ qed2];

(* nmnmxeexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}], -F[1,{2}], V[1], V[1]}, Sequence @@ qed1];
(* nlnlxeexaa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{3}], -F[1,{3}], V[1], V[1]}, Sequence @@ qed1];






