
(* description = "pp -> V+jets|pp -> V+jets|pp -> V(j)|On-shell vector boson (Z/W/Photon) production plus zero or one jet" *)


SelectInterference = {eQED -> 2};

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


(* Z *)

(* ddxz *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2]}];
(* uuxz *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2]}];
(* bbxz *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2]}];

(* ddxz *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* uuxz *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* bbxz *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* ccxz *) AddProcess[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[2]}, SetParameters -> JoinOptions[{MC -> MC}]];

(* W *)

(* udxw  *) AddProcess[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3]}];
(* uxdwx *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[3]}];

(* Zj *)

(* ddxzg *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2], V[5]}];
(* uuxzg *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2], V[5]}];
(* bbxzg *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2], V[5]}];

(* ddxzg *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* uuxzg *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* bbxzg *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* ccxzg *) AddProcess[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[2], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];

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

(* dddxdxz *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> { V[2],  F[4,{1}],  F[4,{1}]}];
(* uuxddxz *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2],  F[3,{1}], -F[3,{1}]}];
(* ddxssxz *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2],  F[4,{2}], -F[4,{2}]}];
(* ddxzgg  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2],  V[5]    ,  V[5]    }];
(* uuxzgg  *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2],  V[5]    ,  V[5]    }];
(* uuuxuxz *) AddReal[FeynArtsProcess -> { F[3,{1}],  F[3,{1}]} -> { V[2],  F[3,{1}],  F[3,{1}]}];
(* uuxccxz *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2],  F[3,{2}], -F[3,{2}]}];

(* ddxbbxz *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2], -F[4,{3}],  F[4,{3}]}];
(* uuxbbxz *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2], -F[4,{3}],  F[4,{3}]}];
(* bbbxbxz *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2], -F[4,{3}],  F[4,{3}]}];
(* bbxzgg  *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[2],  V[5]    ,  V[5]    }];

(* ddxccxz *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[2], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* uuxccxz *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[2], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* cccxcxz *) AddReal[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[2], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* ccxzgg  *) AddReal[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[2],  V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{MC -> MC}]];



(* Wj *)

(* udxwg  *) AddProcess[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3], V[5]}];
(* uxdwxg *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[3], V[5]}];

(* udxwg  *) AddProcess[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3], V[5]}, Sequence @@ nf5];
(* uxdwxg *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[3], V[5]}, Sequence @@ nf5];

(* udxwgg   *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3], V[5], V[5]}];
(* uddxdxw  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {-V[3], F[4,{1}], -F[3,{1}]}];
(* cddxsxw  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> {-V[3], F[4,{2}], -F[3,{2}]}];
(* uuuxdxw  *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3], F[3,{1}], -F[3,{1}]}];
(* udxbbxw  *) AddReal[FeynArtsProcess -> {-F[4,{1}],  F[3,{1}]} -> {-V[3], F[4,{3}], -F[4,{3}]}];

(* uxdwxgg  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[3], V[5], V[5]}];
(* uxdddxwx *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> { V[3], F[4,{1}],  F[3,{1}]}];
(* cxddxswx *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[3], F[3,{2}], -F[4,{2}]}];
(* uuxuxdwx *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[3,{1}]} -> { V[3], F[3,{1}],  F[3,{1}]}];
(* uxdbbxwx *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[3,{1}]} -> { V[3], F[4,{3}], -F[4,{3}]}];

(* Aj *)

(* ddxag *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], V[5]}];
(* uuxag *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], V[5]}];
(* bbxag *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], V[5]}];

(* ddxag *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* uuxag *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* bbxag *) AddProcess[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* ccxag *) AddProcess[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[1], V[5]}, SetParameters -> JoinOptions[{MC -> MC}]];

(* ddxag *) AddProcess[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], V[5]}, Sequence @@ nf5];
(* uuxag *) AddProcess[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], V[5]}, Sequence @@ nf5];

(* dddxdxa *) AddReal[FeynArtsProcess -> { F[4,{1}],  F[4,{1}]} -> { V[1],  F[4,{1}],  F[4,{1}]}];
(* uuxddxa *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1],  F[3,{1}], -F[3,{1}]}];
(* ddxssxa *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1],  F[4,{2}], -F[4,{2}]}];
(* ddxagg  *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1],  V[5]    ,  V[5]    }];
(* uuxagg  *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1],  V[5]    ,  V[5]    }];
(* uuuxuxa *) AddReal[FeynArtsProcess -> { F[3,{1}],  F[3,{1}]} -> { V[1],  F[3,{1}],  F[3,{1}]}];
(* uuxccxa *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1],  F[3,{2}], -F[3,{2}]}];

(* ddxbbxa *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], -F[4,{3}],  F[4,{3}]}];
(* uuxbbxa *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], -F[4,{3}],  F[4,{3}]}];
(* bbbxbxa *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1], -F[4,{3}],  F[4,{3}]}];
(* bbxagg  *) AddReal[FeynArtsProcess -> { F[4,{3}], -F[4,{3}]} -> { V[1],  V[5]    ,  V[5]    }];

(* ddxccxa *) AddReal[FeynArtsProcess -> { F[4,{1}], -F[4,{1}]} -> { V[1], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* uuxccxa *) AddReal[FeynArtsProcess -> { F[3,{1}], -F[3,{1}]} -> { V[1], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* cccxcxa *) AddReal[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[1], -F[3,{2}],  F[3,{2}]}, SetParameters -> JoinOptions[{MC -> MC}]];
(* ccxagg  *) AddReal[FeynArtsProcess -> { F[3,{2}], -F[3,{2}]} -> { V[1],  V[5]    ,  V[5]    }, SetParameters -> JoinOptions[{MC -> MC}]];



ChannelMap = {
  "bbxz" -> "ddxz MB=0",
  "bbxzg" -> "ddxzg MB=0",
  "ccxddxz" -> "uuxddxz MC=0",
  "ddxbbxz" -> "ddxssxz MB=0",
  "uuxbbxz" -> "uuxddxz MB=0",
  "bbbxbxz" -> "dddxdxz MB=0",
  "bbxzgg"  -> "ddxzgg MB=0",
  "uccxdxw"  -> "cddxsxw MC=0",
  "udxbbxw"  -> "cddxsxw[1,4,2,3,5] MB=0 MC=0",
  "uxccxdwx" -> "cxddxswx MC=0",
  "uxdbbxwx" -> "cxddxswx[1,4,2,3,5] MB=0 MC=0",
  "ssxz" -> "ddxz",
  "ssxzg" -> "ddxzg",
  "ccxssxz" -> "uuxddxz MC=0",
  "ssxbbxz" -> "ddxssxz",
  "uuxssxz" -> "uuxddxz",
  "sssxsxz" -> "dddxdxz",
  "ssxzgg"  -> "ddxzgg",
  (* Aj *)
  "bbxag" -> "ddxag MB=0",
  "ssxag" -> "ddxag",
  (* reals *)
  "ccxddxa" -> "uuxddxa MC=0",
  "ddxbbxa" -> "ddxssxa MB=0",
  "uuxbbxa" -> "uuxddxa MB=0",
  "bbbxbxa" -> "dddxdxa MB=0",
  "bbxagg"  -> "ddxagg MB=0"
};
