NLOModels: VLQ_Calculus.py

File VLQ_Calculus.py, 7.1 KB (added by Benjamin Fuks, 6 years ago)

Coupling calculations (linking the old to the new model)

Line 
1#!/usr/bin/env python
2# Authors: Samuel Calvet (scalvet@clermont.in2p3.fr), Benjamin Fuks (fuks@lpthe.jussieu.fr)
3# Date: March 16th, 2018, v1.00
4
5from math import sqrt,pi
6
7debug=0
8
9def writeParamCard(Input, Output):
10 print "Rewriting",Input,"into",Output
11 computeCouplings("TBXY")
12
13 fin = file(Input, 'r')
14 fout = file(Output, 'w')
15
16 for line in fin.readlines():
17
18 if line.find("# MX")!=-1: fout.write(" 6000005 "+`MX`+" # MX\n")
19 elif line.find("# MTP")!=-1: fout.write(" 6000006 "+`MTP`+" # MTP\n")
20 elif line.find("# MBP")!=-1: fout.write(" 6000007 "+`MBP`+" # MBP\n")
21 elif line.find("# MY")!=-1: fout.write(" 6000008 "+`MY`+" # MY\n")
22
23 elif line.find("DECAY 6000005 ")!=-1: fout.write("DECAY 6000005 Auto\n") # TO BE DONE !
24 elif line.find("DECAY 6000006 ")!=-1: fout.write("DECAY 6000006 Auto\n") # TO BE DONE !
25 elif line.find("DECAY 6000007 ")!=-1: fout.write("DECAY 6000007 Auto\n") # TO BE DONE !
26 elif line.find("DECAY 6000008 ")!=-1: fout.write("DECAY 6000008 Auto\n") # TO BE DONE !
27
28
29 elif line.find("KBLh1")!=-1: fout.write(" 1 "+`KBLh1`+" # KBLh1 \n")
30 elif line.find("KBLh2")!=-1: fout.write(" 1 "+`KBLh2`+" # KBLh2 \n")
31 elif line.find("KBLh3")!=-1: fout.write(" 1 "+`KBLh3`+" # KBLh3 \n")
32 elif line.find("KBLw1")!=-1: fout.write(" 1 "+`KBLw1`+" # KBLw1 \n")
33 elif line.find("KBLw2")!=-1: fout.write(" 1 "+`KBLw2`+" # KBLw2 \n")
34 elif line.find("KBLw3")!=-1: fout.write(" 1 "+`KBLw3`+" # KBLw3 \n")
35 elif line.find("KBLz1")!=-1: fout.write(" 1 "+`KBLz1`+" # KBLz1 \n")
36 elif line.find("KBLz2")!=-1: fout.write(" 1 "+`KBLz2`+" # KBLz2 \n")
37 elif line.find("KBLz3")!=-1: fout.write(" 1 "+`KBLz3`+" # KBLz3 \n")
38
39 elif line.find("KTLh1")!=-1: fout.write(" 1 "+`KTLh1`+" # KTLh1 \n")
40 elif line.find("KTLh2")!=-1: fout.write(" 1 "+`KTLh2`+" # KTLh2 \n")
41 elif line.find("KTLh3")!=-1: fout.write(" 1 "+`KTLh3`+" # KTLh3 \n")
42 elif line.find("KTLw1")!=-1: fout.write(" 1 "+`KTLw1`+" # KTLw1 \n")
43 elif line.find("KTLw2")!=-1: fout.write(" 1 "+`KTLw2`+" # KTLw2 \n")
44 elif line.find("KTLw3")!=-1: fout.write(" 1 "+`KTLw3`+" # KTLw3 \n")
45 elif line.find("KTLz1")!=-1: fout.write(" 1 "+`KTLz1`+" # KTLz1 \n")
46 elif line.find("KTLz2")!=-1: fout.write(" 1 "+`KTLz2`+" # KTLz2 \n")
47 elif line.find("KTLz3")!=-1: fout.write(" 1 "+`KTLz3`+" # KTLz3 \n")
48
49 elif line.find("KXL1")!=-1: fout.write(" 1 "+`KXL1`+" # KXL1 \n")
50 elif line.find("KXL2")!=-1: fout.write(" 1 "+`KXL2`+" # KXL2 \n")
51 elif line.find("KXL3")!=-1: fout.write(" 1 "+`KXL3`+" # KXL3 \n")
52
53 elif line.find("KYL1")!=-1: fout.write(" 1 "+`KYL1`+" # KYL1 \n")
54 elif line.find("KYL2")!=-1: fout.write(" 1 "+`KYL2`+" # KYL2 \n")
55 elif line.find("KYL3")!=-1: fout.write(" 1 "+`KYL3`+" # KYL3 \n")
56
57 else:
58 fout.write(line)
59 #print line
60
61def getDefaultParameters():
62 # VLQ masses [GeV]
63 global MTP, MBP, MX, MY
64 MTP=600
65 MBP=600
66 MX=600
67 MY=600
68
69 # SM
70 global MZ, MH, Gf, aEW
71 MZ = 91.1876;
72 MH = 125.;
73 Gf = 1.16637e-5;
74 aEW = 1. / 127.9;
75
76 # Desired BRs to be provided as
77 # {VLQ > Wq, VLQ > Zq, VLQ > Hq} at LO
78 # Our choice : 40 % W, 30 % Z and 30 % H
79 global TPdecays, BPdecays
80 TPdecays = [1., 0., 0.]
81 BPdecays = [1., 0., 0.]
82
83 # VLQ mixings with the three SM generations
84 #Our choice: third generaton only
85 global TPmix, BPmix, Xmix, Ymix
86 #TPmix = [0., 0., 1.];
87 #BPmix = [0., 0., 1.];
88 #Xmix = [0., 0., 1.];
89 #Ymix = [0., 0., 1.];
90 TPmix = [0.4, 0.3, 0.3];
91 BPmix = [0.4, 0.3, 0.3];
92 Xmix = [0.4, 0.3, 0.3];
93 Ymix = [0.4, 0.3, 0.3];
94
95 # Internal parameters
96 # SM
97 global MW, vev
98 MW = sqrt(MZ**2 /2 + sqrt(MZ**4 / 4 - pi/sqrt(2) * aEW / Gf * MZ**2))
99 vev = 2 * MW * sqrt(1 - (MW / MZ)**2) / sqrt(4 * pi * aEW)
100
101def checkInputValues():
102 if sum(TPdecays)!=1: print "Error: bad TPdecays ! The sum is not equal to 1"; exit()
103 if sum(BPdecays)!=1: print "Error: bad BPdecays ! The sum is not equal to 1"; exit()
104 if sum(TPmix)!=1: print "Error: bad TPmix ! The sum is not equal to 1"; exit()
105 if sum(BPmix)!=1: print "Error: bad BPmix ! The sum is not equal to 1"; exit()
106 if sum(Xmix)!=1: print "Error: bad Xmix ! The sum is not equal to 1"; exit()
107 if sum(Ymix)!=1: print "Error: bad Ymix ! The sum is not equal to 1"; exit()
108
109def computeCouplings(VLQs):
110
111 checkInputValues()
112
113 # First compute gammas
114 global gamma0tpw, gamma0tpz, gamma0tph
115 global gamma0bpw, gamma0bpz, gamma0bph
116 global gamma0xw, gamma0yw
117 gamma0tpw = (1 - MW**2 / MTP**2) * (1 + MW**2 / MTP**2 - 2 * MW**4 / MTP**4)
118 gamma0bpw = (1 - MW**2 / MBP**2) * (1 + MW**2 / MBP**2 - 2 * MW**4 / MBP**4)
119 gamma0tpz = 1 / 2 * (1 - MZ**2 / MTP**2) * (1 + MZ**2 / MTP**2 - 2 * MZ**4 / MTP**4)
120 gamma0bpz = 1 / 2 * (1 - MZ**2 / MBP**2) * (1 + MZ**2 / MBP**2 - 2 * MZ**4 / MBP**4)
121 gamma0tph = 1 / 2 * (1 - MH**2 / MTP**2)**2
122 gamma0bph = 1 / 2 * (1 - MH**2 / MBP**2)**2
123 gamma0xw = (1 - MW**2 / MX**2) * (1 + MW**2 / MX**2 - 2 * MW**4 / MX**4)
124 gamma0yw = (1 - MW**2 / MY**2) * (1 + MW**2 / MY**2 - 2 * MW**4 / MY**4)
125
126 # Then compute the couplings
127 global KTLw1, KTLw2, KTLw3, KTLz1, KTLz2, KTLz3, KTLh1, KTLh2, KTLh3
128 if VLQs.find("T")!=-1:
129 if debug: print "T"
130 if gamma0tpw==0: [KTLw1, KTLw2, KTLw3, KTLz1, KTLz2, KTLz3, KTLh1, KTLh2, KTLh3] = [0 for i in range(6)]
131 else:
132 [KTLw1, KTLw2, KTLw3] = [ sqrt(mix*TPdecays[0]/gamma0tpw/gamma0tpw) for mix in TPmix]
133 if gamma0tpz!=0:
134 [KTLz1, KTLz2, KTLz3] = [ sqrt(mix*TPdecays[1]/gamma0tpw/gamma0tpz) for mix in TPmix]
135 else : [KTLz1, KTLz2, KTLz3] = [0, 0, 0]
136 if gamma0tph!=0:
137 [KTLh1, KTLh2, KTLh3] = [ sqrt(mix*TPdecays[2]/gamma0tpw/(vev / MTP * gamma0tph)) for mix in TPmix ]
138 else : [KTLh1, KTLh2, KTLh3] = [0, 0, 0]
139 if debug: print [KTLw1, KTLw2, KTLw3, KTLz1, KTLz2, KTLz3, KTLh1, KTLh2, KTLh3]
140
141 global KBLw1, KBLw2, KBLw3, KBLz1, KBLz2, KBLz3, KBLh1, KBLh2, KBLh3
142 if VLQs.find("B")!=-1:
143 if debug: print "B"
144 if gamma0bpw==0: [KBLw1, KBLw2, KBLw3, KBLz1, KBLz2, KBLz3, KBLh1, KBLh2, KBLh3] = [0 for i in range(6)]
145 else:
146 [KBLw1, KBLw2, KBLw3] = [ sqrt(mix*BPdecays[0]/gamma0bpw/gamma0bpw) for mix in BPmix]
147 if gamma0bpz!=0:
148 [KBLz1, KBLz2, KBLz3] = [ sqrt(mix*BPdecays[1]/gamma0bpw/gamma0bpz) for mix in BPmix]
149 else : [KBLz1, KBLz2, KBLz3] = [0, 0, 0]
150 if gamma0bph!=0:
151 [KBLh1, KBLh2, KBLh3] = [ sqrt(mix*BPdecays[2]/gamma0bpw/(vev / MTB * gamma0bph)) for mix in TBmix ]
152 else : [KBLh1, KBLh2, KBLh3] = [0, 0, 0]
153 if debug: print [KBLw1, KBLw2, KBLw3, KBLz1, KBLz2, KBLz3, KBLh1, KBLh2, KBLh3]
154
155 global KXL1, KXL2, KXL3
156 if VLQs.find("X")!=-1:
157 if debug: print "X",gamma0xw
158 [KXL1, KXL2, KXL3] = [ sqrt(mix/gamma0xw) for mix in Xmix ]
159 if debug: print [KXL1, KXL2, KXL3]
160
161 global KYL1, KYL2, KYL3
162 if VLQs.find("Y")!=-1:
163 if debug: print "Y"
164 [KYL1, KYL2, KYL3] = [ sqrt(mix/gamma0yw) for mix in Ymix ]
165 if debug: print [KYL1, KYL2, KYL3]
166
167getDefaultParameters()
168writeParamCard(Input="param_card.dat", Output="param_card_new.dat")
169
170
171'''
172# Here is how to redefine some paramters and compte the new couplings:
173getDefaultParameters()
174global MTP,TPmix
175MTP=1000 # for example change the TP mass
176TPmix = [1./3, 1./3, 1./3]; # .. and its couplings
177writeParamCard(Input="param_card.dat", Output="param_card_new.dat")
178'''
179
180
181