
(* description = "pp -> VVV+jets|pp -> lllla+jets|pp -> lllla|Production of four leptons (all combinations of leptons and neutrinos) and an on-shell photon." *)

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

(* ZZ 2e2e *)
(* eeexexddxa     *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexuuxa     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexbbxa     *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2e2m *)
(* eexmmxddxa     *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxuuxa     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxbbxa     *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* W+W-, ZZ ee *)
(* nenexeexddxa   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexuuxa   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexbbxa   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* W+W- em *)
(* nexnmemxddxa   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxuuxa   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxbbxa   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2e2nm *)
(* nmnmxeexuuxa   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexddxa   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexbbxa   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2ne2ne *)
(* nenenexnexddxa *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexuuxa *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexbbxa *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2ne2nm *)
(* nenexnmnmxddxa *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxuuxa *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxbbxa *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZW- *)
(* neeexexuxda    *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nmeexmxuxda    *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}],  F[2,{2}], -F[1,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenenexexuxda  *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], -F[1,{1}],  F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenmnmxexuxda  *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{2}], -F[1,{2}],  F[2,{1}], -F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZW+ *)
(* nmxeexmudxa    *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}],  F[1,{2}], -F[2,{2}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexeeexudxa    *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], -F[2,{1}],  F[1,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexnexeudxa  *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexnmnmxeudxa  *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{2}], -F[1,{2}],  F[1,{1}], -F[2,{1}], V[1]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2e2e *)
(* eeexexddxag     *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexuuxag     *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexbbxag     *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* ZZ 2e2m *)
(* eexmmxddxag     *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxuuxag     *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxbbxag     *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* W+W-, ZZ ee *)
(* nenexeexddxag   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexuuxag   *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexbbxag   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* W+W- em *)
(* nexnmemxddxag   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxuuxag   *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxbbxag   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZZ 2e2nm *)
(* nmnmxeexuuxag   *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexddxag   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexbbxag   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZZ 2ne2ne *)
(* nenenexnexddxag *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexuuxag *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexbbxag *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* ZZ 2ne2nm *)
(* nenexnmnmxddxag *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxuuxag *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxbbxag *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZW- *)
(* neeexexuxdag    *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nmeexmxuxdag    *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}],  F[2,{2}], -F[1,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenenexexuxdag  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], -F[1,{1}],  F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenmnmxexuxdag  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{2}], -F[1,{2}],  F[2,{1}], -F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZW+ *)
(* nmxeexmudxag    *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}],  F[1,{2}], -F[2,{2}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexeeexudxag    *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], -F[2,{1}],  F[1,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexnexeudxag  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexnmnmxeudxag  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{2}], -F[1,{2}],  F[1,{1}], -F[2,{1}], V[1], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

ChannelMap = {
  "eeexexbbxa"     -> "eeexexddxa MB=0",
  "eexmmxbbxa"     -> "eexmmxddxa MB=0",
  "nmnmxeexbbxa"   -> "nmnmxeexddxa MB=0",
  "nenenexnexbbxa" -> "nenenexnexddxa MB=0",
  "nenexnmnmxbbxa" -> "nenexnmnmxddxa MB=0",
  (* reals *)
  "eeexexbbxga"     -> "eeexexddxag MB=0",
  "eexmmxbbxga"     -> "eexmmxddxag MB=0",
  "nmnmxeexbbxag"   -> "nmnmxeexddxag MB=0",
  "nenenexnexbbxag" -> "nenenexnexddxag MB=0",
  "nenexnmnmxbbxag" -> "nenexnmnmxddxag MB=0"
};
