
(* description = "pp -> VV+jets|pp -> Z/A/W(->ll)A+jets|pp -> llA|Off-shell Z/A/W boson and on-shell photon production with leptonic decays (l+l-/nn/l+n/l-n)" *)

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


(* ZA *)

(* eexddxa   *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxa   *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexbbxa   *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{1}], -F[2,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* llxddxa   *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxuuxa   *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* llxbbxa   *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{3}], -F[2,{3}]}, SetParameters -> JoinOptions[{ML -> ML}]];

(* nenexddxa *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxa *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbxa *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[1,{1}], -F[1,{1}]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* eexddxag   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexuuxag   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* eexbbxag   *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* llxddxag   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* llxuuxag   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* llxbbxag   *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{3}], -F[2,{3}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* nenexddxag *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexuuxag *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* nenexbbxag *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* WA *)

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

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

(* nexeudxawg  *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> { V[1], -F[2,{1}],  F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];
(* neexuxdawxg *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[1],  F[2,{1}], -F[1,{1}], V[5]}, SetParameters -> JoinOptions[{ME -> 0}]];

(* nexeudxawg  *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> { V[1], -F[2,{3}],  F[1,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];
(* neexuxdawxg *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[1],  F[2,{3}], -F[1,{3}], V[5]}, SetParameters -> JoinOptions[{ML -> ML}]];



nf5 = {
        SetParameters -> JoinOptions[{ME -> 0, MB -> 0, nf -> 5}],
        InsertFieldsOptions -> {Restrictions -> {ExcludeParticles -> {F[3,{3}]}, NoQuarkMixing}}
};


(* ZA *)

(* eexddxa   *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{1}], -F[2,{1}]}, Sequence @@ nf5];
(* eexuuxa   *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{1}], -F[2,{1}]}, Sequence @@ nf5];
(* eexbbxa   *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{1}], -F[2,{1}]}, Sequence @@ nf5];

(* llxddxa   *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{3}], -F[2,{3}]}, Sequence @@ nf5];
(* llxuuxa   *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{3}], -F[2,{3}]}, Sequence @@ nf5];
(* llxbbxa   *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{3}], -F[2,{3}]}, Sequence @@ nf5];

(* nenexddxa *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[1,{1}], -F[1,{1}]}, Sequence @@ nf5];
(* nenexuuxa *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[1,{1}], -F[1,{1}]}, Sequence @@ nf5];
(* nenexbbxa *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[1,{1}], -F[1,{1}]}, Sequence @@ nf5];

(* eexddxag   *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, Sequence @@ nf5];
(* eexuuxag   *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, Sequence @@ nf5];
(* eexbbxag   *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[2,{1}], -F[2,{1}], V[5]}, Sequence @@ nf5];

(* nenexddxag *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, Sequence @@ nf5];
(* nenexuuxag *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, Sequence @@ nf5];
(* nenexbbxag *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], F[1,{1}], -F[1,{1}], V[5]}, Sequence @@ nf5];

(* WA *)

(* nexeudxaw  *) AddProcess[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> { V[1], -F[2,{1}],  F[1,{1}]}, Sequence @@ nf5];
(* neexuxdawx *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[1],  F[2,{1}], -F[1,{1}]}, Sequence @@ nf5];

(* nexeudxawg  *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> { V[1], -F[2,{1}],  F[1,{1}], V[5]}, Sequence @@ nf5];
(* neexuxdawxg *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[1],  F[2,{1}], -F[1,{1}], V[5]}, Sequence @@ nf5];



ChannelMap = {
  "eexbbxa"   -> "eexddxa MB=0",
  "llxbbxa"   -> "llxddxa MB=0",
  "nenexbbxa" -> "nenexddxa MB=0",
  "nlnlxddxa" -> "nenexddxa",
  "nlnlxuuxa" -> "nenexuuxa",
  "nlnlxbbxa" -> "nenexddxa MB=0",
(* reals *)
  "eexbbxag"   -> "eexddxag MB=0",
  "nlnlxddxag" -> "nenexddxag",
  "nlnlxuuxag" -> "nenexuuxag",
  "nenexbbxag" -> "nenexddxag MB=0",
  "nlnlxbbxag" -> "nlnlxddxag MB=0"
};
