
(* description = "ee -> VV+jets|ee -> llll+jets|ee -> llll|Production of four leptons (all combinations of leptons and neutrinos) in e+e- at NLO EW." *)

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}]
  };



(* ZZ 2e2e *)
(* eeeexexex     *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}], UnitaryGauge -> False];

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

(* W+W-, ZZ ee *)
(* nenexeeexex   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}], UnitaryGauge -> False];

(* W+W- em *)
(* nexnmeeexmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], UnitaryGauge -> False];

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

(* ZZ 2ne2ne *)
(* nenenexnexeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}], UnitaryGauge -> False];

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

(* ZZ 2e2e *)
(* eeeexexex     *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2m2m *)
(* eexmmmxmx     *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[2,{2}], -F[2,{2}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2e2m *)
(* eeexexmmx     *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2e2m *)
(* eexmmmxmx     *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[2,{2}], -F[2,{2}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* W+W-, ZZ ee *)
(* nenexeeexex   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* W+W- em *)
(* nexnmeeexmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2e2nm *)
(* nmnmxeeexex   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2m2ne *)
(* nenexeexmmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{2}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2m2nm *)
(* nenexeexmmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{2}], -F[2,{2}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2ne2ne *)
(* nenenexnexeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2ne2nm *)
(* nenexnmnmxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2ne2nl *)
(* nenexnlnlxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{3}], -F[1,{1}], -F[1,{3}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* ZZ 2nm2nl *)
(* nmnmxnlnlxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}],  F[1,{3}], -F[1,{2}], -F[1,{3}]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}], UnitaryGauge -> False];

(* SM + NLO QED *)

(* ZZ 2e2nm *)
(* nmnmxeeexex   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2m2ne *)
(* nenexeexmmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{2}], -F[1,{1}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2m2nm *)
(* nenexeexmmx   *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{2}], -F[2,{2}], -F[1,{2}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2ne2ne *)
(* nenenexnexeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2ne2nm *)
(* nenexnmnmxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2ne2nl *)
(* nenexnlnlxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{3}], -F[1,{1}], -F[1,{3}]}, Sequence @@ qed1, UnitaryGauge -> False];

(* ZZ 2nm2nl *)
(* nmnmxnlnlxeex *) AddProcess[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{2}],  F[1,{3}], -F[1,{2}], -F[1,{3}]}, Sequence @@ qed1, UnitaryGauge -> False];


(* Reals *)

(* ZZ 2e2e *)
(* eeeexexex     *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2e2m *)
(* eeexexmmx     *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* W+W-, ZZ ee *)
(* nenexeeexex   *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* W+W- em *)
(* nexnmeeexmx   *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2e2nm *)
(* nmnmxeeexex   *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2ne2ne *)
(* nenenexnexeex *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2ne2nm *)
(* nenexnmnmxeex *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];


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

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

(* W+W-, ZZ ee *)
(* nenexeeexex   *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];

(* W+W- em *)
(* nexnmeeexmx   *) AddReal[FeynArtsProcess -> {F[2,{1}], -F[2,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> ME, MM -> MM}]];

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

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

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


