
(* description = "pp -> VV+jets|pp -> llll+jets|pp -> llll|Production of four leptons (all combinations of leptons and neutrinos)." *)

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

(* ZZ 2e2e *)
(* eeexexddx     *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexuux     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexbbx     *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2e2m *)
(* eexmmxddx     *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxuux     *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxbbx     *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* W+W-, ZZ ee *)
(* nenexeexddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* W+W- em *)
(* nexnmemxddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2e2nm *)
(* nmnmxeexuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZZ 2ne2ne *)
(* nenenexnexddx *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexuux *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexbbx *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* ZZ 2ne2nm *)
(* nenexnmnmxddx *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxuux *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxbbx *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZW- *)
(* neeexexuxd    *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nmeexmxuxd    *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}],  F[2,{2}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenenexexuxd  *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], -F[1,{1}],  F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenmnmxexuxd  *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{2}], -F[1,{2}],  F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* ZW+ *)
(* nmxeexmudx    *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}],  F[1,{2}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexeeexudx    *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], -F[2,{1}],  F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexnexeudx  *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexnmnmxeudx  *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{2}], -F[1,{2}],  F[1,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

(* old Sherpa *)
(* nenmxexmuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{2}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenmxexmddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{2}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenmxexmbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{2}], -F[2,{2}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmmxuxd  *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}],  F[2,{2}], -F[1,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmxmudx  *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}],  F[1,{2}], -F[2,{2}]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];


(* ZZ 2e2e *)
(* eeexexddxg     *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eeexexuuxg     *) AddReal[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}]];
(* eeexexbbxg     *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* ZZ 2e2m *)
(* eexmmxddxg     *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* eexmmxuuxg     *) AddReal[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}]];
(* eexmmxbbxg     *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[2,{2}], -F[2,{1}], -F[2,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* W+W-, ZZ ee *)
(* nenexeexddxg   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexeexuuxg   *) AddReal[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}]];
(* nenexeexbbxg   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{1}], -F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* W+W- em *)
(* nexnmemxddxg   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexnmemxuuxg   *) AddReal[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}]];
(* nexnmemxbbxg   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{2}],  F[1,{1}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZZ 2e2nm *)
(* nmnmxeexuuxg   *) AddReal[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}]];
(* nmnmxeexddxg   *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nmnmxeexbbxg   *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}],  F[1,{2}], -F[2,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZZ 2ne2ne *)
(* nenenexnexddxg *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenenexnexuuxg *) AddReal[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}]];
(* nenenexnexbbxg *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* ZZ 2ne2nm *)
(* nenexnmnmxddxg *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenexnmnmxuuxg *) AddReal[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}]];
(* nenexnmnmxbbxg *) AddReal[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}],  F[1,{2}], -F[1,{1}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZW- *)
(* neeexexuxdg    *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}],  F[2,{1}], -F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nmeexmxuxdg    *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}],  F[2,{2}], -F[1,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nenenexexuxdg  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], -F[1,{1}],  F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenmnmxexuxdg  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[1,{2}], -F[1,{2}],  F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* ZW+ *)
(* nmxeexmudxg    *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}],  F[1,{2}], -F[2,{2}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];
(* nexeeexudxg    *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], -F[2,{1}],  F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexnexeudxg  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}],  F[1,{1}], -F[1,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexnmnmxeudxg  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{2}], -F[1,{2}],  F[1,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0, MM -> 0}]];

ChannelMap = {
  "eeexexbbx"     -> "eeexexddx MB=0",
  "eexmmxbbx"     -> "eexmmxddx MB=0",
  "nmnmxeexbbx"   -> "nmnmxeexddx MB=0",
  "nenenexnexbbx" -> "nenenexnexddx MB=0",
  "nenexnmnmxbbx" -> "nenexnmnmxddx MB=0",
  (* reals *)
  "eeexexbbxg"     -> "eeexexddxg MB=0",
  "eexmmxbbxg"     -> "eexmmxddxg MB=0",
  "nmnmxeexbbxg"   -> "nmnmxeexddxg MB=0",
  "nenenexnexbbxg" -> "nenenexnexddxg MB=0",
  "nenexnmnmxbbxg" -> "nenexnmnmxddxg MB=0"
};
