
(* description = "pp -> VV+jets|pp -> llll+jets|gg -> llll|Loop-induced production of four leptons (all combinations of leptons and neutrinos) in gluon fusion." *)

OpenLoopsModel = "SM_yuksel";
SelectCoupling = (Exponent[#1, gQCD] == 2 &);
SelectInterference = {eQED -> 8};
CreateTopologiesOptions = {ExcludeTopologies -> {Snails, WFCorrectionCTs, TadpoleCTs, Loops[5|6]}};

(* Select only heavy-flavour triangles. Light flavour ones vanish per SU(2) doublet. *)
SelectLoopDiagrams = (
  ContainsFermionLoop[##] &&
  NFieldPropagators[F[3|4],0,"Type"->Internal][##] &&
  (NLegsOnLoop[5][##] || NLegsOnLoop[4][##] || (NLegsOnLoop[3][##] && ParticlesInLoop[{F[4,{3}],F[3,{3}]}][##])) &
);

(* Z Z, same and opposite flavour leptons*)
(* eeexexgg     *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0}]];
(* eexmmxgg     *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0, MM -> 0, YM -> 0}]];

(* Z Z, same and opposite flavour neutrinos *)
(* nenenexnexgg *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0}]];
(* nenexnmnmxgg *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0, MM -> 0, YM -> 0}]];

(* Z Z, opposite flavour leptons + neutrinos *)
(* nmnmxeexgg   *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0, MM -> 0, YM -> 0}]];

(* W+ W- / Z Z, same flavour *)
(* nenexeexgg   *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0, MM -> 0, YM -> 0}]];

(* W+ W-, opposite flavour *)
(* nexnmemxgg   *) AddProcess[FeynArtsProcess -> {V[5], V[5]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{YukB -> 1, YukT -> 1, ME -> 0, YE -> 0, MM -> 0, YM -> 0}]];
