[cvs] / MG_ME / Models / sm / couplings.f Repository:
ViewVC logotype

Annotation of /MG_ME/Models/sm/couplings.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10.2.3 - (view) (download)

1 : madgraph 1.1 c----------------------------------------------------------------------
2 :     C couplings.f
3 :     c----------------------------------------------------------------------
4 :     c This files takes the inputs of the standard model from a Les Houches
5 :     c file (param_card.dat) and calculates all the couplings that end up
6 :     c in the Feynman rules, i.e., in the HELAS routines.
7 :     c
8 :     c With the convention of the New Web Generation MadEvent in this
9 :     c part no non-trivial computation is made. The SM model secondary
10 :     c parameters have been all calculated by the SM calculator, SMCalc
11 :     c which produced param_card.dat.
12 :     c
13 :     c The only exception to the above rule is for alpha_S. In the case
14 :     c where a pdf is used in the initial state, then the values as(MZ)
15 :     c set in the les houches card is superseeded.
16 :     c Scales and pdf's are set in the run_card.dat.
17 :     c
18 :     c This file contains the following routines:
19 :     c
20 :     c- madgraph original call to set the parameters
21 :     c- lh_readin is called from here.
22 :     c It talks to the lh_readin through the common block values.
23 :     c subroutine setpara
24 :     c
25 :     c-routine to read the LH parameters in
26 :     c subroutine lh_readin
27 :     c
28 :     c-to set
29 :     c subroutine set_it(npara,ivalue,value,name,id,
30 :     c subroutine case_trap(string,length)
31 :     c subroutine no_spaces(buff,nchars)
32 :     c----------------------------------------------------------------------
33 :    
34 :    
35 : madgraph 1.8 subroutine setpara(param_name,readlha)
36 : madgraph 1.1 c***********************************************************************
37 :     c This subroutine sets up the HELAS couplings of the STANDARD MODEL.
38 :     c***********************************************************************
39 :     implicit none
40 :     c
41 :     c local
42 :     c
43 : madgraph 1.7 character*(*) param_name
44 : madgraph 1.8 logical readlha
45 : madgraph 1.1 integer i
46 :     real*8 dum
47 :     c
48 :     c common file with the couplings
49 :     c
50 :     include 'coupl.inc'
51 :     c
52 :     c local
53 :     c
54 :     double precision v
55 : madgraph 1.10 double precision ee, ee2, ez, ey, sw, cw, sc2, sin2w, wm
56 : madgraph 1.1 double precision gwne, gwud, lambda, lam4, xt, rew, rqcd
57 :     double precision alphas, alfa, alfaw, mfrun
58 :     external alphas, alfa, alfaw, mfrun
59 :     c
60 :     c Common to lh_readin and printout
61 :     c
62 : madgraph 1.10 double precision alpha, gfermi, alfas
63 : madgraph 1.1 double precision mtMS,mbMS,mcMS,mtaMS!MSbar masses
64 :     double precision Vud,Vus !CKM matrix elements
65 : madgraph 1.10 common/values/ alpha,gfermi,alfas,
66 : madgraph 1.1 & mtMS,mbMS,mcMS,mtaMS,
67 :     & Vud
68 :     c
69 :     c constants
70 :     c
71 :     double complex ci
72 :     parameter( ci = ( 0.0d0, 1.0d0 ) )
73 :     double precision Zero, One, Two, Three, Four, Half, Rt2
74 :     parameter( Zero = 0.0d0, One = 1.0d0, Two = 2.0d0 )
75 :     parameter( Three = 3.0d0, Four = 4.0d0, Half = 0.5d0 )
76 :     parameter( Rt2 = 1.414213562d0 )
77 :     double precision Pi, Fourpi
78 :     parameter( Pi = 3.14159265358979323846d0 )
79 :     parameter( Fourpi = Four * Pi )
80 :     c
81 :     c------------------------------------------
82 :     c Start calculating the couplings for HELAS
83 :     c------------------------------------------
84 :     c
85 : madgraph 1.8 if(readlha) then
86 :     call lh_readin(param_name)
87 :     G = DSQRT(4d0*PI*ALFAS) ! use setting of the param_card.dat @ NLO
88 :     endif
89 : madgraph 1.1 c
90 :     c Strong coupling
91 :     c
92 :     c As a rule we first check if a pdf has been chosen in the
93 :     c run_card.dat (which has been already read at this stage).
94 :     c If there pdfs in the initial state, then the alpha_s(MZ) used
95 :     c is set to the corresponding value.
96 :    
97 :     GG(1) = -G
98 :     GG(2) = -G
99 :     c
100 :     c auxiliary local values
101 :     c
102 : madgraph 1.10 wm = sqrt(zmass**2/Two+
103 :     $ sqrt(zmass**4/Four-Pi/Rt2*alpha/gfermi*zmass**2))
104 :     sin2w = One-(wm/zmass)**2
105 : madgraph 1.1 cw = sqrt( One - sin2w )
106 :     ee2 = alpha * Fourpi
107 :     sw = sqrt( sin2w )
108 :     ee = sqrt( ee2 )
109 :     ez = ee/(sw*cw)
110 :     ey = ee*(sw/cw)
111 :     sc2 = sin2w*( One - sin2w )
112 : madgraph 1.10 v = Two*wm*sw/ee ! the wmass is used to calculate v
113 : madgraph 1.1 lambda = hmass**2 / (Two * v**2)
114 :     c
115 :     c vector boson couplings
116 :     c
117 :     gw = ee/sw
118 :     gwwa = ee
119 :     gwwz = ee*cw/sw
120 :     c
121 :     c gauge & higgs boson coupling constants
122 :     c
123 :     gwwh = dcmplx( ee2/sin2w*Half*v, Zero )
124 :     gzzh = dcmplx( ee2/sc2*Half*v, Zero )
125 :     ghhh = dcmplx( -hmass**2/v*Three, Zero )
126 :     gwwhh = dcmplx( ee2/sin2w*Half, Zero )
127 :     gzzhh = dcmplx( ee2/sc2*Half, Zero)
128 :     ghhhh = ghhh/v
129 :     c
130 :     c fermion-fermion-vector couplings
131 :     c
132 :     gal(1) = dcmplx( ee , Zero )
133 :     gal(2) = dcmplx( ee , Zero )
134 :     gau(1) = dcmplx( -ee*Two/Three, Zero )
135 :     gau(2) = dcmplx( -ee*Two/Three, Zero )
136 :     gad(1) = dcmplx( ee/Three , Zero )
137 :     gad(2) = dcmplx( ee/Three , Zero )
138 :    
139 :     gwf(1) = dcmplx( -ee/sqrt(Two*sin2w), Zero )
140 :     gwf(2) = dcmplx( Zero , Zero )
141 :    
142 :     gzn(1) = dcmplx( -ez*Half , Zero )
143 :     gzn(2) = dcmplx( Zero , Zero )
144 :     gzl(1) = dcmplx( -ez*(-Half + sin2w) , Zero )
145 :     gzl(2) = dcmplx( -ey , Zero )
146 :     gzu(1) = dcmplx( -ez*( Half - sin2w*Two/Three), Zero )
147 :     gzu(2) = dcmplx( ey*Two/Three , Zero )
148 :     gzd(1) = dcmplx( -ez*(-Half + sin2w/Three) , Zero )
149 :     gzd(2) = dcmplx( -ey/Three , Zero )
150 :     c
151 :     c fermion-fermion-Higgs couplings (complex) hff(2)
152 :     c
153 :     c NOTE: the running mass is evaluated @ the same order
154 :     c nloop of alpha_s set by the PDF choice
155 :     c
156 :    
157 :     if(mtMS.gt.1d0) then
158 :     ghtop(1) = dcmplx( -mtMS/v, Zero )
159 :     else
160 :     ghtop(1) = dcmplx( Zero,Zero)
161 :     endif
162 :     ghtop(2) = ghtop(1)
163 :    
164 :     if(mbMS.gt.1d0) then
165 :     ghbot(1) = dcmplx( -mbMS/v, Zero )
166 :     else
167 :     ghbot(1) = dcmplx( Zero, Zero )
168 :     endif
169 :     ghbot(2) = ghbot(1)
170 :    
171 :     if(mcMS.gt.1d0) then
172 : madgraph 1.6 ghcha(1) = dcmplx( -mcMS/v, Zero )
173 : madgraph 1.1 else
174 :     ghcha(1) = dcmplx( Zero, Zero )
175 :     endif
176 :     ghcha(2) = ghcha(1)
177 :    
178 :     ghtau(1) = dcmplx( -mtaMS/v, Zero )
179 :     ghtau(2) = ghtau(1)
180 :     c
181 :     c CKM matrix:
182 :     c symmetric 3x3 matrix, Vud=Vcs, Vus=Vcd Vcb=Vub=0
183 :     c
184 :     c >>>>>>>>>>>>>>>***** NOTE****<<<<<<<<<<<<<<<<<<<<<<<<<
185 :     c these couplings matter only when interaction_CKM.dat
186 :     c is used to generate all the diagrams with off-diagonal
187 :     c couplings. The default of MadEvent is a diagonal
188 :     c CKM matrix.
189 :    
190 :     Vus=DSQRT(1d0-Vud**2)
191 :     do i=1,2
192 :     gwfc(i) = gwf(i)*Vud
193 :     gwfs(i) = gwf(i)*Vus
194 :     gwfm(i) =-gwf(i)*Vus
195 :     enddo
196 :    
197 :     c---------------------------------------------------------
198 :     c Set Photon Width to Zero, used by symmetry optimization
199 :     c---------------------------------------------------------
200 :    
201 :     awidth = 0d0
202 :    
203 :     c----------------------------
204 :     c end subroutine coupsm
205 :     c----------------------------
206 :    
207 :    
208 :     return
209 :     end
210 :    
211 : madgraph 1.7 subroutine lh_readin(param_name)
212 : madgraph 1.1 c----------------------------------------------------------------------
213 :     c Read the parameters from the lh file
214 :     c
215 :     c 1. Input values for the EW sector
216 :     c 2. Higgs mass and width
217 :     c 3. Fermion masses (pole and MSbar) and widths
218 :     c----------------------------------------------------------------------
219 :     implicit none
220 : madgraph 1.7
221 : madgraph 1.1 c
222 :     c parameters
223 :     c
224 :     integer maxpara
225 :     parameter (maxpara=100)
226 : madgraph 1.10 double precision Two, Four, Rt2, Pi
227 :     parameter( Two = 2.0d0, Four = 4.0d0 )
228 :     parameter( Rt2 = 1.414213562d0 )
229 :     parameter( Pi = 3.14159265358979323846d0 )
230 : madgraph 1.1 c
231 :     c local
232 :     c
233 : madgraph 1.7 character*(*) param_name
234 : madgraph 1.1 integer npara,l1,l2,id
235 :     character*132 buff
236 :     real*8 real_value
237 :     real*8 value(maxpara)
238 :     integer ivalue(maxpara),n
239 :     character*20 name(maxpara),bn
240 :     logical block_found,done,fopened
241 :     integer iunit,i,name_length,idum
242 :     c
243 :     c block info
244 :     c
245 :     character*20 block_name
246 :     c
247 :     c Common
248 :     c
249 :     include 'coupl.inc'
250 :     c
251 :     c Common to lh_readin and printout
252 :     c
253 : madgraph 1.10 double precision alpha, gfermi, alfas
254 : madgraph 1.1 double precision mtMS,mbMS,mcMS,mtaMS!MSbar masses
255 :     double precision Vud,Vus !CKM matrix elements
256 : madgraph 1.10 common/values/ alpha,gfermi,alfas,
257 : madgraph 1.1 & mtMS,mbMS,mcMS,mtaMS,
258 :     & Vud
259 :     c
260 :     c----------
261 :     c start
262 :     c----------
263 :     c
264 :     c open file
265 :     c
266 :     iunit=14
267 : madgraph 1.9 call open_file_mdl(iunit,param_name,fopened)
268 : madgraph 1.1 done=.false.
269 :    
270 :     n=0
271 :     do while(.not.done)
272 :     block_found=.false.
273 :     c
274 :     c looks for the blocks or for decay
275 :     c
276 :     do while(.not.block_found)
277 :     read(iunit,'(a132)',end=99,err=99) buff
278 :     c-- change to lower case
279 :     call case_trap(buff,20)
280 :     if(buff(1:5).eq.'block') then
281 :     if(index(buff,"#").ne.0) l1=index(buff,"#")-1
282 :     block_name=buff(6:min(l1,26))
283 :     call no_spaces(block_name,name_length)
284 :     c write(*,*) block_name(1:name_length)
285 :     block_found=.true.
286 :     elseif(buff(1:5).eq.'decay') then
287 :     n=n+1
288 :     l1=30
289 :     if(index(buff,"#").ne.0) l1=index(buff,"#")-1 ! ignore comments
290 :     read(buff(6:l1),*) ivalue(n),value(n)
291 :     name(n)="decay"
292 :     endif
293 :     end do
294 :     c
295 :     c
296 :     if(block_found) then
297 :     do while(.true.)
298 :     read(iunit,'(a132)',end=99,err=99) buff
299 :     call case_trap(buff,20)
300 :     if(buff(1:1).eq.'b'.or.buff(1:1).eq.'d') then
301 :     backspace iunit
302 :     exit
303 :     endif
304 :     if(buff(1:1).ne.'#') then !if it not a comment
305 :     n=n+1
306 :     l1=30
307 :     if(index(buff,"#").ne.0) l1=index(buff,"#")-1 ! ignore comments
308 :     c
309 :     c WARNING:... not all blocks have the same sintax!! You need to change it
310 :     c depending on the block you are reading
311 :     c
312 :     if(block_name(1:5).eq."mgckm") then
313 :     read(buff(1:l1),*) ivalue(n),idum,value(n)
314 :     else
315 :     read(buff(1:l1),*) ivalue(n),value(n)
316 :     endif
317 :     name(n)=block_name(1:name_length)
318 :     c write(*,"(1x,i2,2x,e16.8,1x,a)")
319 :     c & ivalue(n),value(n),name(n)
320 :     endif
321 :     end do ! do while in the block
322 :     else
323 :     done=.true.
324 :     endif
325 :     end do ! do while the entire file
326 :    
327 :    
328 :     99 continue
329 :    
330 :     bn="sminputs"
331 :     call set_it(n,ivalue,value,name,1,bn,alpha,128.9d0)
332 :     alpha=1d0/alpha
333 :     call set_it(n,ivalue,value,name,2,bn,gfermi,0.1166d-4)
334 :     call set_it(n,ivalue,value,name,3,bn,alfas,0.119d0)
335 :     call set_it(n,ivalue,value,name,4,bn,zmass,91.188d0)
336 :     call set_it(n,ivalue,value,name,6,bn,tmass,174.3d0)
337 :     call set_it(n,ivalue,value,name,7,bn,lmass,1.777d0)
338 :     bn="mgyukawa"
339 :     call set_it(n,ivalue,value,name,4,bn,mcMS,1.25d0)
340 :     call set_it(n,ivalue,value,name,5,bn,mbMS,4.2d0)
341 :     call set_it(n,ivalue,value,name,6,bn,mtMS,174d0)
342 :     call set_it(n,ivalue,value,name,15,bn,mtaMS,1.777d0)
343 :     bn="mgckm"
344 :     call set_it(n,ivalue,value,name,1,bn,vud,1d0)
345 :     bn="mass"
346 :     call set_it(n,ivalue,value,name,4,bn,cmass,1.4d0)
347 :     call set_it(n,ivalue,value,name,5,bn,bmass,4.7d0)
348 :     call set_it(n,ivalue,value,name,6,bn,tmass,tmass*1d0)
349 :     call set_it(n,ivalue,value,name,15,bn,lmass,lmass*1d0)
350 :     call set_it(n,ivalue,value,name,25,bn,hmass,120d0)
351 :     call set_it(n,ivalue,value,name,23,bn,zmass,zmass*1d0)
352 : madgraph 1.10 call set_it(n,ivalue,value,name,24,bn,wmass,sqrt(zmass**2/Two+
353 :     $ sqrt(zmass**4/Four-Pi/Rt2*alpha/gfermi*zmass**2)))
354 : madgraph 1.1 bn="decay"
355 :     call set_it(n,ivalue,value,name,6,bn,twidth,1.5083d0)
356 :     call set_it(n,ivalue,value,name,25,bn,hwidth,0.0037d0)
357 :     call set_it(n,ivalue,value,name,23,bn,zwidth,2.441d0)
358 :     call set_it(n,ivalue,value,name,24,bn,wwidth,2.0476d0)
359 :    
360 :     return
361 :     end
362 :    
363 :    
364 :     subroutine set_it(npara,ivalue,value,name,id,
365 :     & block_name,var,def_value)
366 :     c----------------------------------------------------------------------------------
367 :     c finds the parameter value in block_name and associate var to it.
368 :     c If it is not found a default is given.
369 :     c----------------------------------------------------------------------------------
370 :     implicit none
371 :    
372 :     c
373 :     c parameters
374 :     c
375 :     integer maxpara
376 :     parameter (maxpara=100)
377 :     c
378 :     c arguments
379 :     c
380 :     integer npara,ivalue(maxpara),id
381 :     character*20 block_name,name(maxpara)
382 :     real*8 var,def_value,value(maxpara)
383 :     c
384 :     c local
385 :     c
386 :     logical found
387 :     integer i
388 :     c
389 :     c start
390 :     c
391 :     found=.false.
392 :     do i=1,npara
393 :     found = (id.eq.ivalue(i)).and.(name(i).eq.block_name)
394 :     if(found) then
395 :     var=value(i)
396 :     exit
397 :     endif
398 :     enddo
399 :    
400 :     if (.not.found) then
401 :     c write (*,*) "Warning: parameter not found"
402 :     c write (*,*) " setting it to default value ",def_value
403 :     var=def_value
404 :     endif
405 :     return
406 :    
407 :     end
408 :    
409 :    
410 :     subroutine case_trap(string,length)
411 :     c**********************************************************
412 :     c change string to lowercase if the input is not
413 :     c**********************************************************
414 :     implicit none
415 :     c
416 :     c ARGUMENT
417 :     c
418 :     character*(*) string
419 :     integer length
420 :     c
421 :     c LOCAL
422 :     c
423 :     integer i,k
424 :    
425 :     do i=1,length
426 :     k=ichar(string(i:i))
427 :     if(k.ge.65.and.k.le.90) then !upper case A-Z
428 :     k=ichar(string(i:i))+32
429 :     string(i:i)=char(k)
430 :     endif
431 :     enddo
432 :    
433 :     return
434 :     end
435 :    
436 :    
437 :     subroutine no_spaces(buff,nchars)
438 :     c**********************************************************************
439 :     c Given buff a buffer of words separated by spaces
440 :     c returns it where all space are moved to the right
441 :     c returns also the length of the single word.
442 :     c maxlength is the length of the buffer
443 :     c**********************************************************************
444 :     implicit none
445 :     c
446 :     c Constants
447 :     c
448 :     integer maxline
449 :     parameter (maxline=20)
450 :     character*1 null
451 :     parameter (null=' ')
452 :     c
453 :     c Arguments
454 :     c
455 :     character*(maxline) buff
456 :     integer nchars,maxlength
457 :     c
458 :     c Local
459 :     c
460 :     integer i,j
461 :     character*(maxline) temp
462 :     c-----
463 :     c Begin Code
464 :     c-----
465 :     nchars=0
466 :     c write (*,*) "buff=",buff(1:maxlength)
467 :     do i=1,maxline
468 :     if(buff(i:i).ne.null) then
469 :     nchars=nchars+1
470 :     temp(nchars:nchars)=buff(i:i)
471 :     endif
472 :     c write(*,*) i,":",buff(1:maxlength),":",temp(1:nchars),":"
473 :     enddo
474 :     buff=temp
475 :     end
476 :    
477 : madgraph 1.9 subroutine open_file_mdl(lun,filename,fopened)
478 : madgraph 1.4 c***********************************************************************
479 :     c opens file input-card.dat in current directory or above
480 :     c***********************************************************************
481 :     implicit none
482 :     c
483 :     c Arguments
484 :     c
485 :     integer lun
486 :     logical fopened
487 :     character*(*) filename
488 :     character*30 tempname
489 :     integer fine
490 :     integer dirup
491 :    
492 :     c-----
493 :     c Begin Code
494 :     c-----
495 :     c
496 :     c first check that we will end in the main directory
497 :     c
498 :     open(unit=lun,file="Source/makefile",status='old',err=20)
499 :     dirup=0
500 :     goto 100
501 :     20 close(lun)
502 :    
503 :     open(unit=lun,file="../Source/makefile",status='old',err=30)
504 :     dirup=1
505 :     goto 100
506 :     30 close(lun)
507 :    
508 :     open(unit=lun,file="../../Source/makefile",status='old',err=40)
509 :     dirup=2
510 :     goto 100
511 :     40 close(lun)
512 :    
513 :     open(unit=lun,file="../../../Source/makefile",status='old',err=50)
514 :     dirup=3
515 :     goto 100
516 :     50 close(lun)
517 :    
518 : madgraph 1.10.2.3 open(unit=lun,file="../../../../Source/makefile",status='old',err=60)
519 :     dirup=4
520 :     goto 100
521 :     60 close(lun)
522 :    
523 : madgraph 1.4 100 continue
524 :     close(lun)
525 :    
526 :     fopened=.true.
527 :     tempname=filename
528 :     fine=index(tempname,' ')
529 :     if(fine.eq.0) fine=len(tempname)
530 :     c
531 :     c if I have to read a card
532 :     c
533 :     if(index(filename,"_card").gt.0) then
534 :     tempname='/Cards/'//tempname(1:fine)
535 :     fine=fine+7
536 :     endif
537 :    
538 :     if(dirup.eq.0) open(unit=lun,file=tempname(1:fine),status='old',err=110)
539 :     if(dirup.eq.1) open(unit=lun,file='../'//tempname(1:fine),status='old',err=110)
540 :     if(dirup.eq.2) open(unit=lun,file='../../'//tempname(1:fine),status='old',err=110)
541 :     if(dirup.eq.3) open(unit=lun,file='../../../'//tempname(1:fine),status='old',err=110)
542 : madgraph 1.10.2.3 if(dirup.eq.4) open(unit=lun,file='../../../../'//tempname(1:fine),status='old',err=110)
543 : madgraph 1.4 return
544 :    
545 :     110 fopened=.false.
546 :     close(lun)
547 :     write (*,*) 'Warning: file ',tempname(1:fine),' is not in the main directory'
548 :    
549 :     return
550 :     end
551 :    

Mail to administrator
ViewVC Help
Powered by ViewVC 1.0.0