
(* description = "ee -> V+jets|ee -> ll+jets|ee -> ll|Dilepton (e+e-, mu+mu-, L+L-, ve ve~, vm vm~) 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}]
};

qed3 = {
  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 *)

(* eeexex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexllx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}]}, UnitaryGauge -> False, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

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


(* SM + NLO QED *)

(* eeexex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}]}, UnitaryGauge -> False, Sequence @@ qed1];
(* eexmmx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}]}, UnitaryGauge -> False, Sequence @@ qed1];
(* eexllx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}]}, UnitaryGauge -> False, Sequence @@ qed1];

(* Photon + NLO QED *)

(* eeexex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}]}, UnitaryGauge -> False, Sequence @@ qed2];
(* eexmmx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}]}, UnitaryGauge -> False, Sequence @@ qed2];
(* eexllx *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}]}, UnitaryGauge -> False, Sequence @@ qed2];


(* Reals *)

(* eeexexa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}], -F[2,{1}], V[1]}];
(* eexmmxa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}], -F[2,{2}], V[1]}];
(* eexllxa *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{3}], -F[2,{3}], V[1]}];

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

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

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




