
(* description = "pp -> VV+jets|pp -> llll+jets|pp -> llllj|Squared one-loop matrix elements for four lepton production (all combinations of leptons and neutrinos); gluon fusion (+qq splitting), i.e. gggllll and gqqllll where the four-lepton system is directly coupled to the quark loop." *)

SelectInterference = {eQED -> 8};
CreateTopologiesOptions = {ExcludeTopologies -> {Snails, WFCorrectionCTs, TadpoleCTs, Loops[6|7]}};
ColourCorrelations = False;

SelectTreeDiagrams = (False &);
SelectLoopDiagrams = (ContainsFermionLoop[##] && NFieldPropagators[F[3|4],0,"Type"->Internal][##] &);

DefaultProcessOptions = {
  SelectCTDiagrams -> NFieldPropagators[V[5],1]
};

(* eeexexuuxg     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexmmxuuxg     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenenexnexuuxg *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexnmnmxuuxg *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexeexuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexnmemxuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* eeexexggg      *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]         , SelectCTDiagrams -> (True &)];
(* eexmmxggg      *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], SelectCTDiagrams -> (True &)];
(* nenenexnexggg  *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]         , SelectCTDiagrams -> (True &)];
(* nenexnmnmxggg  *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], SelectCTDiagrams -> (True &)];
(* nmnmxeexggg    *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], SelectCTDiagrams -> (True &)];
(* nenexeexggg    *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]         , SelectCTDiagrams -> (True &)];
(* nexnmemxggg    *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], SelectCTDiagrams -> (True &)];

(* old Sherpa: nenmxexm instead of nexnmemx *)
(* nenmxexmuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{2}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenmxexmggg    *) AddProcess[FeynArtsProcess -> {V[5]    ,  V[5]    } -> {F[2,{1}],  F[1,{2}], -F[2,{2}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}], SelectCTDiagrams -> (True &)];

ChannelMap = {
  "eeexexddxg"     -> "eeexexuuxg",
  "eeexexbbxg"     -> "eeexexuuxg MB=0",
  "eexmmxddxg"     -> "eexmmxuuxg",
  "eexmmxbbxg"     -> "eexmmxuuxg MB=0",
  "nenexeexddxg"   -> "nenexeexuuxg",
  "nenexeexbbxg"   -> "nenexeexuuxg MB=0",
  "nmnmxeexddxg"   -> "nmnmxeexuuxg",
  "nmnmxeexbbxg"   -> "nmnmxeexuuxg MB=0",
  "nenmxexmddxg"   -> "nenmxexmuuxg",
  "nenmxexmbbxg"   -> "nenmxexmuuxg MB=0",
  "nenenexnexddxg" -> "nenenexnexuuxg",
  "nenenexnexbbxg" -> "nenenexnexuuxg MB=0",
  "nenexnmnmxddxg" -> "nenexnmnmxuuxg",
  "nenexnmnmxbbxg" -> "nenexnmnmxuuxg MB=0"
};
