NLOModels: VLQ_Calculus.py

File VLQ_Calculus.py, 7.1 KB (added by BenjF, 2 months 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