
(* description = "pp -> V+jets|pp -> Z/A/W(->ll/ln)+jets|pp -> ll(j)|Off-shell Z/A/W boson production with leptonic decays (l+l-/nn/l+n/l-n/L+L-/L+n/L-n) and zero or one jet." *)

SelectInterference = {eQED -> 4};
CreateTopologiesOptions = {ExcludeTopologies -> {Snails, WFCorrectionCTs, TadpoleCTs, Loops[5]}};

(* Z *)

(* eexddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexddx *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuux *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* eexbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbx *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* llxddx   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuux   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxbbx   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];

(* W *)

(* neexuxd *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexeudx *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* nllxuxd *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{3}], -F[1,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxludx *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];


(* Zj *)

(* eexddxg   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexddxg *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxg *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* eexbbxg   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbxg *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* llxddxg   *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxg   *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[3,{1}]} -> {F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxbbxg   *) AddProcess[FeynArtsProcess -> {F[4,{3}], -F[4,{3}]} -> {F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];

(* eexdddxdx   *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> {F[2,{1}], -F[2,{1}], F[4,{1}],  F[4,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxddx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], F[3,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexddxssx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], F[4,{2}], -F[4,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexddxgg    *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuuxux   *) AddReal[FeynArtsProcess -> { F[3,{1}],  F[3,{1}]} -> {F[2,{1}], -F[2,{1}], F[3,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxccx   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}], F[3,{2}], -F[3,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxgg    *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexdddxdx *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> {F[1,{1}], -F[1,{1}], F[4,{1}],  F[4,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxddx *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}], F[3,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexddxssx *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}], F[4,{2}], -F[4,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexddxgg  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuuxux *) AddReal[FeynArtsProcess -> { F[3,{1}],  F[3,{1}]} -> {F[1,{1}], -F[1,{1}], F[3,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxccx *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], F[3,{2}], -F[3,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxgg  *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];

(* eexddxbbx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[2,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxbbx   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{1}], -F[2,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexbbbxbx   *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[2,{1}], -F[2,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexbbxgg    *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[2,{1}], -F[2,{1}],  V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexddxbbx *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[1,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxbbx *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[1,{1}], -F[1,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbbxbx *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[1,{1}], -F[1,{1}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbxgg  *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[1,{1}], -F[1,{1}],  V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ME -> 0}]];

(* llxdddxdx   *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> {F[2,{3}], -F[2,{3}], F[4,{1}],  F[4,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxddx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}], F[3,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxddxssx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}], F[4,{2}], -F[4,{2}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxddxgg    *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuuxux   *) AddReal[FeynArtsProcess -> { F[3,{1}],  F[3,{1}]} -> {F[2,{3}], -F[2,{3}], F[3,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxccx   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{3}], -F[2,{3}], F[3,{2}], -F[3,{2}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxgg    *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{3}], -F[2,{3}], V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ML -> ML}]];

(* llxddxbbx   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[2,{3}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxbbx   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> {F[2,{3}], -F[2,{3}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxbbbxbx   *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[2,{3}], -F[2,{3}], -F[4,{3}],  F[4,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxbbxgg    *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> {F[2,{3}], -F[2,{3}],  V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{ML -> ML}]];


(* Wj *)

(* neexuxdg *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexeudxg *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* nllxuxdg *) AddProcess[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{3}], -F[1,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxludxg *) AddProcess[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];

(* neexuxdgg  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[1,{1}], V[5], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* neexuxdddx *) AddReal[FeynArtsProcess -> {F[4,{1}],  F[4,{1}]} -> {F[2,{1}], -F[1,{1}], F[4,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* neexcxddxs *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{1}], -F[1,{1}], F[3,{2}], -F[4,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* neexuuxuxd *) AddReal[FeynArtsProcess -> {F[3,{1}],  F[4,{1}]} -> {F[2,{1}], -F[1,{1}], F[3,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* neexuxdbbx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{1}], -F[1,{1}], F[4,{3}], -F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* nexeudxgg  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], V[5], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexeuddxdx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], F[4,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexecddxsx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], F[4,{2}], -F[3,{2}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexeuuuxdx *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], F[3,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nexeudxbbx *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{1}], -F[2,{1}], F[4,{3}], -F[4,{3}]}, SetParameters -> JoinOptions[{ME -> 0}]];


(* nllxuxdgg  *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{3}], -F[1,{3}], V[5], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nllxuxdddx *) AddReal[FeynArtsProcess -> {F[4,{1}],  F[4,{1}]} -> {F[2,{3}], -F[1,{3}], F[4,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nllxcxddxs *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[2,{3}], -F[1,{3}], F[3,{2}], -F[4,{2}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nllxuuxuxd *) AddReal[FeynArtsProcess -> {F[3,{1}],  F[4,{1}]} -> {F[2,{3}], -F[1,{3}], F[3,{1}],  F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nllxuxdbbx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[3,{1}]} -> {F[2,{3}], -F[1,{3}], F[4,{3}], -F[4,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];

(* nlxludxgg  *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], V[5], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxluddxdx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], F[4,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxlcddxsx *) AddReal[FeynArtsProcess -> {F[4,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], F[4,{2}], -F[3,{2}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxluuuxdx *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], F[3,{1}], -F[3,{1}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* nlxludxbbx *) AddReal[FeynArtsProcess -> {F[3,{1}], -F[4,{1}]} -> {F[1,{3}], -F[2,{3}], F[4,{3}], -F[4,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];



ChannelMap = {
  "eexbbx"   -> "eexddx MB=0",
  "nenexbbx" -> "nenexddx MB=0",
  "llxbbx"   -> "llxddx MB=0",
  (* reals *)
  "eexbbxg"   -> "eexddxg MB=0",
  "nenexbbxg" -> "nenexddxg MB=0",
  "llxbbxg"   -> "llxddxg MB=0",
  "eexccxddx"   -> "eexuuxddx",
  "eexddxbbx"   -> "eexddxssx MB=0",
  "eexuuxbbx"   -> "eexuuxddx MB=0",
  "eexbbbxbx"   -> "eexdddxdx MB=0",
  "eexbbxgg"    -> "eexddxgg MB=0",
  "nenexccxddx" -> "nenexuuxddx",
  "nenexddxbbx" -> "nenexddxssx MB=0",
  "nenexuuxbbx" -> "nenexuuxddx MB=0",
  "nenexbbbxbx" -> "nenexdddxdx MB=0",
  "nenexbbxgg"  -> "nenexddxgg MB=0",
  "llxccxddx"   -> "llxuuxddx",
  "llxddxbbx"   -> "llxddxssx MB=0",
  "llxuuxbbx"   -> "llxuuxddx MB=0",
  "llxbbbxbx"   -> "llxdddxdx MB=0",
  "llxbbxgg"    -> "llxddxgg MB=0",
  "nexeuccxdx" -> "nexecddxsx",
  "nexeudxbbx" -> "nexecddxsx[1,2,3,6,4,5] MB=0",
  "neexuxccxd" -> "neexcxddxs",
  "neexuxdbbx" -> "neexcxddxs[1,2,3,6,4,5] MB=0",
  "nlxluccxdx" -> "nlxlcddxsx",
  "nlxludxbbx" -> "nlxlcddxsx[1,2,3,6,4,5] MB=0",
  "nllxuxccxd" -> "nllxcxddxs",
  "nllxuxdbbx" -> "nllxcxddxs[1,2,3,6,4,5] MB=0"
};
