whizard is hosted by Hepforge, IPPP Durham

Ticket #310: fr_color_triplet_vectors.ml

File fr_color_triplet_vectors.ml, 17.3 KB (added by Christian Speckner, 14 years ago)

1.9x version of the same model.

Line 
1(* --------------------------------------------------------------------------------
2   Autogenerated by the preliminary FeynRules <-> WHIZARD automaton on 4/23/2010 , 14:48:26
3   FeynRules version: $Revision: 119 $
4   WHIZARD interface svn revision info: $Id: WhizardOmegaInterface.m 134 2010-04-23 10:28:44Z ChristianSpeckner $
5   Code generated for WHIZARD / O'Mega version 1.93
6   Model: color_triplet_vectors
7   Short model name: fr_color_triplet_vectors
8   Gauge: Unitarity
9   Maximum number of couplings per FORTRAN module: 500
10   -------------------------------------------------------------------------------- *)
11
12type gauge = Unitarity | Feynman | Rxi
13
14module type Frules_options =
15sig
16   val gauge: gauge
17   val color: bool
18end
19
20module Implementation (Opts: Frules_options) =
21struct
22
23   open Coupling
24
25   (* The FeynRules classes with their members *)
26
27   type f1_Vl =
28      | Ve | Ve_bar | Vm | Vm_bar | Vt | Vt_bar
29   type f2_L =
30      | E_minus | E_plus | M_minus | M_plus | Tt_minus | Tt_plus
31   type f3_Uq =
32      | U | U_bar | C | C_bar | T | T_bar
33   type f4_Dq =
34      | D | D_bar | S | S_bar | B | B_bar
35   type v1_A =
36      | A_1
37   type v2_Z =
38      | Z_1
39   type v3_W =
40      | W_plus | W_minus
41   type v4_G =
42      | G_1
43   type v7_X =
44      | X1 | X2
45   type s1_H =
46      | H_1
47   type s2_Phi =
48      | Phi0
49   type s3_Phi2 =
50      | Phi_plus | Phi_minus
51
52   (* The FeynRules lorentz types with the corresponding classes *)
53
54   type scalar =
55      | S1_H of s1_H | S2_Phi of s2_Phi | S3_Phi2 of s3_Phi2
56   type fermion =
57      | F1_Vl of f1_Vl | F2_L of f2_L | F3_Uq of f3_Uq | F4_Dq of f4_Dq
58   type vector =
59      | V1_A of v1_A | V2_Z of v2_Z | V3_W of v3_W | V4_G of v4_G | V7_X of v7_X
60
61   (* The actual flavor type *)
62
63   type flavor =
64      | FRS of scalar | FRF of fermion | FRV of vector
65
66   (* Trampoline functions *)
67
68   let fermion_of_f1_Vl c = F1_Vl c
69   let fermion_of_f2_L c = F2_L c
70   let fermion_of_f3_Uq c = F3_Uq c
71   let fermion_of_f4_Dq c = F4_Dq c
72   let vector_of_v1_A c = V1_A c
73   let vector_of_v2_Z c = V2_Z c
74   let vector_of_v3_W c = V3_W c
75   let vector_of_v4_G c = V4_G c
76   let vector_of_v7_X c = V7_X c
77   let scalar_of_s1_H c = S1_H c
78   let scalar_of_s2_Phi c = S2_Phi c
79   let scalar_of_s3_Phi2 c = S3_Phi2 c
80   let flavor_of_scalar lt = FRS lt
81   let flavor_of_fermion lt = FRF lt
82   let flavor_of_vector lt = FRV lt
83
84   (* Particle lists *)
85
86   let f1_Vl_members =
87      [Ve; Ve_bar; Vm; Vm_bar; Vt; Vt_bar;]
88   let f2_L_members =
89      [E_minus; E_plus; M_minus; M_plus; Tt_minus; Tt_plus;]
90   let f3_Uq_members =
91      [U; U_bar; C; C_bar; T; T_bar;]
92   let f4_Dq_members =
93      [D; D_bar; S; S_bar; B; B_bar;]
94   let v1_A_members =
95      [A_1;]
96   let v2_Z_members =
97      [Z_1;]
98   let v3_W_members =
99      [W_plus; W_minus;]
100   let v4_G_members =
101      [G_1;]
102   let v7_X_members =
103      [X1; X2;]
104   let s1_H_members =
105      [H_1;]
106   let s2_Phi_members =
107      [Phi0;]
108   let s3_Phi2_members =
109      [Phi_plus; Phi_minus;]
110   let all_scalars = []
111      @ (List.map scalar_of_s1_H s1_H_members)
112      @ (List.map scalar_of_s2_Phi s2_Phi_members)
113      @ (List.map scalar_of_s3_Phi2 s3_Phi2_members)
114   let all_fermions = []
115      @ (List.map fermion_of_f1_Vl f1_Vl_members)
116      @ (List.map fermion_of_f2_L f2_L_members)
117      @ (List.map fermion_of_f3_Uq f3_Uq_members)
118      @ (List.map fermion_of_f4_Dq f4_Dq_members)
119   let all_vectors = []
120      @ (List.map vector_of_v1_A v1_A_members)
121      @ (List.map vector_of_v2_Z v2_Z_members)
122      @ (List.map vector_of_v3_W v3_W_members)
123      @ (List.map vector_of_v4_G v4_G_members)
124      @ (List.map vector_of_v7_X v7_X_members)
125
126   (* The conjugation operation on a single class *)
127
128   let conjugate_f1_Vl = function 
129      | Ve -> Ve_bar | Ve_bar -> Ve | Vm -> Vm_bar | Vm_bar -> Vm | Vt -> Vt_bar
130      | Vt_bar -> Vt
131   let conjugate_f2_L = function 
132      | E_minus -> E_plus | E_plus -> E_minus | M_minus -> M_plus | M_plus -> M_minus
133      | Tt_minus -> Tt_plus | Tt_plus -> Tt_minus
134   let conjugate_f3_Uq = function 
135      | U -> U_bar | U_bar -> U | C -> C_bar | C_bar -> C | T -> T_bar | T_bar -> T
136   let conjugate_f4_Dq = function 
137      | D -> D_bar | D_bar -> D | S -> S_bar | S_bar -> S | B -> B_bar | B_bar -> B
138   let conjugate_v1_A = function 
139      | x -> x
140   let conjugate_v2_Z = function 
141      | x -> x
142   let conjugate_v3_W = function 
143      | W_plus -> W_minus | W_minus -> W_plus
144   let conjugate_v4_G = function 
145      | x -> x
146   let conjugate_v7_X = function 
147      | X1 -> X2 | X2 -> X1
148   let conjugate_s1_H = function 
149      | x -> x
150   let conjugate_s2_Phi = function 
151      | x -> x
152   let conjugate_s3_Phi2 = function 
153      | Phi_plus -> Phi_minus | Phi_minus -> Phi_plus
154
155   (* The conjugation operation on a lorentz type *)
156
157   let conjugate_scalar = function 
158      | S1_H x -> S1_H (conjugate_s1_H x)
159      | S2_Phi x -> S2_Phi (conjugate_s2_Phi x)
160      | S3_Phi2 x -> S3_Phi2 (conjugate_s3_Phi2 x)
161   let conjugate_fermion = function 
162      | F1_Vl x -> F1_Vl (conjugate_f1_Vl x)
163      | F2_L x -> F2_L (conjugate_f2_L x)
164      | F3_Uq x -> F3_Uq (conjugate_f3_Uq x)
165      | F4_Dq x -> F4_Dq (conjugate_f4_Dq x)
166   let conjugate_vector = function 
167      | V1_A x -> V1_A (conjugate_v1_A x)
168      | V2_Z x -> V2_Z (conjugate_v2_Z x)
169      | V3_W x -> V3_W (conjugate_v3_W x)
170      | V4_G x -> V4_G (conjugate_v4_G x)
171      | V7_X x -> V7_X (conjugate_v7_X x)
172
173   (* Conjugation for the masses *)
174
175   let conjugate = function
176      | FRS x -> FRS (conjugate_scalar x)
177      | FRF x -> FRF (conjugate_fermion x)
178      | FRV x -> FRV (conjugate_vector x)
179
180   let color = function
181      | FRS _ -> Color.Singlet
182      | FRF x -> (match x with 
183         | F1_Vl _ -> Color.Singlet
184         | F2_L _ -> Color.Singlet
185         | F3_Uq x -> (match x with 
186            | U | C | T -> Color.SUN 3 | U_bar | C_bar | T_bar -> Color.SUN (-3))
187         | F4_Dq x -> (match x with 
188            | D | S | B -> Color.SUN 3 | D_bar | S_bar | B_bar -> Color.SUN (-3)))
189      | FRV x -> (match x with 
190         | V1_A _ -> Color.Singlet
191         | V2_Z _ -> Color.Singlet
192         | V3_W _ -> Color.Singlet
193         | V4_G G_1 -> Color.AdjSUN 3
194         | V7_X x -> (match x with 
195            | X1 -> Color.SUN 3 | X2 -> Color.SUN (-3)))
196
197   let pdg = function
198      | FRS x -> (match x with 
199         | S1_H H_1 -> 25
200         | S2_Phi Phi0 -> 250
201         | S3_Phi2 x -> (match x with 
202            | Phi_plus -> 251 | Phi_minus -> -251))
203      | FRF x -> (match x with 
204         | F1_Vl x -> (match x with 
205            | Ve -> 12 | Ve_bar -> -12 | Vm -> 14 | Vm_bar -> -14 | Vt -> 16 | Vt_bar -> -16)
206
207         | F2_L x -> (match x with 
208            | E_minus -> 11 | E_plus -> -11 | M_minus -> 13 | M_plus -> -13 | Tt_minus -> 15
209            | Tt_plus -> -15)
210         | F3_Uq x -> (match x with 
211            | U -> 2 | U_bar -> -2 | C -> 4 | C_bar -> -4 | T -> 6 | T_bar -> -6)
212         | F4_Dq x -> (match x with 
213            | D -> 1 | D_bar -> -1 | S -> 3 | S_bar -> -3 | B -> 5 | B_bar -> -5))
214      | FRV x -> (match x with 
215         | V1_A A_1 -> 22
216         | V2_Z Z_1 -> 23
217         | V3_W x -> (match x with 
218            | W_plus -> 24 | W_minus -> -24)
219         | V4_G G_1 -> 21
220         | V7_X x -> (match x with 
221            | X1 -> 99999 | X2 -> -99999))
222
223   let lorentz = function
224      | FRF x -> (match x with 
225         | F1_Vl x -> (match x with 
226            | Ve | Vm | Vt -> Spinor | Ve_bar | Vm_bar | Vt_bar -> ConjSpinor)
227         | F2_L x -> (match x with 
228            | E_minus | M_minus | Tt_minus -> Spinor | E_plus | M_plus | Tt_plus -> ConjSpinor)
229
230         | F3_Uq x -> (match x with 
231            | U | C | T -> Spinor | U_bar | C_bar | T_bar -> ConjSpinor)
232         | F4_Dq x -> (match x with 
233            | D | S | B -> Spinor | D_bar | S_bar | B_bar -> ConjSpinor))
234      | FRV x -> (match x with 
235         | V1_A A_1 -> Vector
236         | V2_Z Z_1 -> Massive_Vector
237         | V3_W x -> (match x with 
238            | W_plus | W_minus -> Massive_Vector)
239         | V4_G G_1 -> Vector
240         | V7_X x -> (match x with 
241            | X1 | X2 -> Massive_Vector))
242      | FRS _ -> Scalar
243
244   type gauge = Xi
245
246   let propagator = 
247      let msg = "fr_color_triplet_vectors.Implementation: invalid lorentz rep in propagator" in function
248      | FRS _ -> Prop_Scalar
249      | FRF x -> (match lorentz (FRF x) with
250         | Spinor -> Prop_Spinor
251         | ConjSpinor -> Prop_ConjSpinor
252         | Majorana -> Prop_Majorana
253         | _ -> invalid_arg msg)
254      | FRV x -> (match Opts.gauge with
255         | Unitarity -> (match lorentz (FRV x) with
256            | Vector -> Prop_Feynman
257            | Massive_Vector -> Prop_Unitarity
258            | _ -> invalid_arg msg)
259         | Feynman -> (match lorentz (FRV x) with
260            | Vector -> Prop_Feynman
261            | Massive_Vector -> Prop_Rxi Xi
262            | _ -> invalid_arg msg)
263         | Rxi -> (match lorentz (FRV x) with
264            | Vector -> Prop_Gauge Xi
265            | Massive_Vector -> Prop_Rxi Xi
266            | _ -> invalid_arg msg))
267
268   let width_symbol = function
269      | FRS x -> (match x with 
270         | S1_H H_1 -> "wh"
271         | S2_Phi Phi0 -> "wphi"
272         | S3_Phi2 x -> (match x with 
273            | Phi_plus -> "wphi2" | Phi_minus -> "wphi2"))
274      | FRF x -> (match x with 
275         | F1_Vl _ -> "fr_zero"
276         | F2_L _ -> "fr_zero"
277         | F3_Uq x -> (match x with 
278            | T -> "wt" | T_bar -> "wt" | _ -> "fr_zero")
279         | F4_Dq _ -> "fr_zero")
280      | FRV x -> (match x with 
281         | V1_A _ -> "fr_zero"
282         | V2_Z Z_1 -> "wz"
283         | V3_W x -> (match x with 
284            | W_plus -> "ww" | W_minus -> "ww")
285         | V4_G _ -> "fr_zero"
286         | V7_X x -> (match x with 
287            | X1 -> "wy" | X2 -> "wy"))
288
289   let width x = match width_symbol x with 
290      | "0" -> Vanishing
291      | _ -> Timelike
292
293   let fermion x = (match lorentz x with
294      | Spinor -> 1 | ConjSpinor -> -1 | Majorana -> 2 | _ -> 0)
295
296   let colsymm _ = (0, false), (0, false)
297
298   let flavors () = []
299      @ (List.map flavor_of_scalar all_scalars)
300      @ (List.map flavor_of_fermion all_fermions)
301      @ (List.map flavor_of_vector all_vectors)
302
303   let external_flavors () = ["FeynRules autogenerated flavors", flavors ()]
304
305   let goldstone _ = None
306
307   let flavor_to_string = function
308      | FRS x -> (match x with 
309         | S1_H H_1 -> "H"
310         | S2_Phi Phi0 -> "phi0"
311         | S3_Phi2 x -> (match x with 
312            | Phi_plus -> "phi+" | Phi_minus -> "phi-"))
313      | FRF x -> (match x with 
314         | F1_Vl x -> (match x with 
315            | Ve -> "ve" | Ve_bar -> "ve~" | Vm -> "vm" | Vm_bar -> "vm~" | Vt -> "vt"
316            | Vt_bar -> "vt~")
317         | F2_L x -> (match x with 
318            | E_minus -> "e-" | E_plus -> "e+" | M_minus -> "m-" | M_plus -> "m+"
319            | Tt_minus -> "tt-" | Tt_plus -> "tt+")
320         | F3_Uq x -> (match x with 
321            | U -> "u" | U_bar -> "u~" | C -> "c" | C_bar -> "c~" | T -> "t" | T_bar -> "t~")
322
323         | F4_Dq x -> (match x with 
324            | D -> "d" | D_bar -> "d~" | S -> "s" | S_bar -> "s~" | B -> "b" | B_bar -> "b~"))
325      | FRV x -> (match x with 
326         | V1_A A_1 -> "A"
327         | V2_Z Z_1 -> "Z"
328         | V3_W x -> (match x with 
329            | W_plus -> "W+" | W_minus -> "W-")
330         | V4_G G_1 -> "G"
331         | V7_X x -> (match x with 
332            | X1 -> "X1" | X2 -> "X2"))
333
334   let flavor_to_TeX = function
335      | FRS x -> (match x with 
336         | S1_H H_1 -> "\\phi"
337         | S2_Phi Phi0 -> "phi0"
338         | S3_Phi2 x -> (match x with 
339            | Phi_plus -> "\\phi^+" | Phi_minus -> "\\phi^-"))
340      | FRF x -> (match x with 
341         | F1_Vl x -> (match x with 
342            | Ve -> "ve" | Ve_bar -> "ve~" | Vm -> "vm" | Vm_bar -> "vm~" | Vt -> "vt"
343            | Vt_bar -> "vt~")
344         | F2_L x -> (match x with 
345            | E_minus -> "e-" | E_plus -> "e+" | M_minus -> "m-" | M_plus -> "m+"
346            | Tt_minus -> "tt-" | Tt_plus -> "tt+")
347         | F3_Uq x -> (match x with 
348            | U -> "u" | U_bar -> "u~" | C -> "c" | C_bar -> "c~" | T -> "t" | T_bar -> "t~")
349
350         | F4_Dq x -> (match x with 
351            | D -> "d" | D_bar -> "d~" | S -> "s" | S_bar -> "s~" | B -> "b" | B_bar -> "b~"))
352      | FRV x -> (match x with 
353         | V1_A A_1 -> "A"
354         | V2_Z Z_1 -> "Z"
355         | V3_W x -> (match x with 
356            | W_plus -> "W+" | W_minus -> "W-")
357         | V4_G G_1 -> "G"
358         | V7_X x -> (match x with 
359            | X1 -> "X1" | X2 -> "X2"))
360
361   let flavor_of_string x =
362      let dict = List.map (fun x -> (x, flavor_to_string x)) (flavors ())
363      in try
364         fst (List.find (fun (_, y) -> (x = y)) dict)
365      with
366         Not_found -> invalid_arg "fr_color_triplet_vectors.Implementation: flavor_of_string: invalid particle?"
367
368   let flavor_symbol = function
369      | FRS x -> (match x with 
370         | S1_H H_1 -> "h_1"
371         | S2_Phi Phi0 -> "phi0"
372         | S3_Phi2 x -> (match x with 
373            | Phi_plus -> "phi_plus" | Phi_minus -> "phi_minus"))
374      | FRF x -> (match x with 
375         | F1_Vl x -> (match x with 
376            | Ve -> "ve" | Ve_bar -> "ve_bar" | Vm -> "vm" | Vm_bar -> "vm_bar" | Vt -> "vt"
377            | Vt_bar -> "vt_bar")
378         | F2_L x -> (match x with 
379            | E_minus -> "e_minus" | E_plus -> "e_plus" | M_minus -> "m_minus"
380            | M_plus -> "m_plus" | Tt_minus -> "tt_minus" | Tt_plus -> "tt_plus")
381         | F3_Uq x -> (match x with 
382            | U -> "u" | U_bar -> "u_bar" | C -> "c" | C_bar -> "c_bar" | T -> "t"
383            | T_bar -> "t_bar")
384         | F4_Dq x -> (match x with 
385            | D -> "d" | D_bar -> "d_bar" | S -> "s" | S_bar -> "s_bar" | B -> "b"
386            | B_bar -> "b_bar"))
387      | FRV x -> (match x with 
388         | V1_A A_1 -> "a_1"
389         | V2_Z Z_1 -> "z_1"
390         | V3_W x -> (match x with 
391            | W_plus -> "w_plus" | W_minus -> "w_minus")
392         | V4_G G_1 -> "g_1"
393         | V7_X x -> (match x with 
394            | X1 -> "x1" | X2 -> "x2"))
395
396   let gauge_symbol = function
397      Xi -> (match Opts.gauge with
398         | Unitarity -> invalid_arg
399            "fr_color_triplet_vectors.Implementation: requesting gauge symbol in unitarity gauge!"
400         | Feynman -> "one"
401         | Rxi -> "Rxi")
402
403   let mass_symbol = function
404      | FRS x -> (match x with 
405         | S1_H H_1 -> "mh"
406         | S2_Phi Phi0 -> "mz"
407         | S3_Phi2 x -> (match x with 
408            | Phi_plus -> "mw" | Phi_minus -> "mw"))
409      | FRF x -> (match x with 
410         | F1_Vl _ -> "fr_zero"
411         | F2_L x -> (match x with 
412            | E_minus -> "me" | E_plus -> "me" | M_minus -> "mm" | M_plus -> "mm"
413            | Tt_minus -> "mta" | Tt_plus -> "mta")
414         | F3_Uq x -> (match x with 
415            | U -> "mu" | U_bar -> "mu" | C -> "mc" | C_bar -> "mc" | T -> "mt"
416            | T_bar -> "mt")
417         | F4_Dq x -> (match x with 
418            | D -> "md" | D_bar -> "md" | S -> "ms" | S_bar -> "ms" | B -> "mb"
419            | B_bar -> "mb"))
420      | FRV x -> (match x with 
421         | V1_A _ -> "fr_zero"
422         | V2_Z Z_1 -> "mz"
423         | V3_W x -> (match x with 
424            | W_plus -> "mw" | W_minus -> "mw")
425         | V4_G _ -> "fr_zero"
426         | V7_X x -> (match x with 
427            | X1 -> "my" | X2 -> "my"))
428
429   (* Coupling constants and parameters *)
430
431   type constant =
432      | G_g_1_x1_x2 | G_g_1_x1_x2_1 | G_g_1_g_1_x1_x2 | G_g_1_g_1_x1_x2_1
433
434   let parameters () = {input = []; derived = []; derived_arrays = []}
435
436   let constant_symbol = function
437      | G_g_1_x1_x2 -> "G_g_1_x1_x2" | G_g_1_x1_x2_1 -> "G_g_1_x1_x2_1"
438      | G_g_1_g_1_x1_x2 -> "G_g_1_g_1_x1_x2"
439      | G_g_1_g_1_x1_x2_1 -> "G_g_1_g_1_x1_x2_1"
440
441   (* Vertices and fusions *)
442
443   let max_degree () = 4
444
445   let gauge4 = Coupling.Vector4 [2, Coupling.C_13_42; (-1), Coupling.C_12_34; (-1), Coupling.C_14_23]
446
447   let vertices_3 = []
448
449   let vertices_3_qcd = [
450      (FRV (V4_G G_1), FRV (V7_X X1), FRV (V7_X X2)),
451       Dim4_Vector_Vector_Vector_L 1,
452       G_g_1_x1_x2
453      ;
454      (FRV (V4_G G_1), FRV (V7_X X2), FRV (V7_X X1)),
455       Dim4_Vector_Vector_Vector_L 1,
456       G_g_1_x1_x2_1
457      ;
458      (FRV (V4_G G_1), FRV (V7_X X1), FRV (V7_X X2)),
459       Dim4_Vector_Vector_Vector_T 1,
460       G_g_1_x1_x2
461      ;
462      (FRV (V4_G G_1), FRV (V7_X X2), FRV (V7_X X1)),
463       Dim4_Vector_Vector_Vector_T 1,
464       G_g_1_x1_x2_1
465   ]
466
467   let vertices_4 = []
468
469   let vertices_4_qcd = [
470      (FRV (V4_G G_1), FRV (V4_G G_1), FRV (V7_X X1), FRV (V7_X X2)),
471       Vector4 [1, Coupling.C_13_42],
472       G_g_1_g_1_x1_x2
473      ;
474      (FRV (V4_G G_1), FRV (V4_G G_1), FRV (V7_X X1), FRV (V7_X X2)),
475       Vector4 [1, Coupling.C_14_23],
476       G_g_1_g_1_x1_x2_1
477   ]
478
479   let vertices_n = []
480
481   let vertices_n_qcd = []
482
483   let vertices () = (
484      vertices_3 @ (match Opts.color with true -> vertices_3_qcd | false -> []),
485      vertices_4 @ (match Opts.color with true -> vertices_4_qcd | false -> []),
486      vertices_n @ (match Opts.color with true -> vertices_n_qcd | false -> [])
487   )
488
489   module F = Models.Fusions (struct
490      type f = flavor
491      type c = constant
492      let compare = compare
493      let conjugate = conjugate
494   end)
495
496   let table = F.of_vertices (vertices ())
497   let fuse2 = F.fuse2 table
498   let fuse3 = F.fuse3 table
499   let fuse = F.fuse table
500
501   (* Misc. infrastructure *)
502
503   let options = Options.empty
504
505   let rcs = RCS.parse "fr_color_triplet_vectors" ["automatically generate FeynRules model - testing only"] {
506      RCS.revision = "Revision: Noop";
507      RCS.date = "Date: Noop";
508      RCS.author = "Author: FeynRules automaton";
509      RCS.source = "Source: Noop"
510   }
511
512end