C++InterfacetoTauola
wid_a1_fit.f
1  SUBROUTINE ifgfact(IKEY,ITYPE,IINIT)
2 C stores and manages options for wid_a1_fit
3 C ITYPE=0,1,2 means zero value, from full table, from GFACT plus table for KKpi
4 C IINIT is for GFACT, whether it has to reinitialize itself or just be used
5 C IKEY 0,1,2 means initialization use by GFUNCT (reini) other use
6 C IKEY -1 mieans initialization with recalculation og GFUNCT constats
7 
8  DATA itype0,iinit0 /1,0/
9  SAVE itype0,iinit0
10 
11  IF (ikey.EQ.-1) THEN
12  itype0=itype
13  iinit0=iinit
14  ELSEIF(ikey.EQ.0) THEN
15  itype0=itype
16  ELSEIF(ikey.EQ.1) THEN
17  iinit=iinit0
18  iinit0=1
19  ELSEIF(ikey.EQ.2) THEN
20  itype= itype0
21  ENDIF
22  END
23 
24  real function wid_a1_fit(qq)
25  implicit none
26  real qq
27 C..............................................................
28 C. Output: a1 width as function of qq (formula (29) of ref [1])
29 C. but to speed up execution linear interpolation
30 C. from numerical table is used. From read in table
31 C. linear interpolation (extrapolation) is used.
32 C. Input: qq [GeV**2]
33 C. table wida1_qq_tot_table.txt prepared in
34 C. ./a1-tabler directory
35 C. References:[1] arXiv:0911.4436 (hep-ph) D.Gomez Dumm et al.(tau ->3pi nu)
36 C. Called : files f3pi_rcht.f fkkpi.f fkk0pi0.f
37 C ./demo-standalone/tautestroman.f
38 C..............................................................
39 
40  integer nq
41  parameter(nq=1001)
42  integer ik
43  common /a1_width/ qmax,qmin,qk_min, w_qmin, del_qq
44  real*8 qmax,qmin,qk_min(nq),w_qmin(nq),del_qq
45  integer kq
46  character path*120
47 
48  real*8 aq,bq,qk_max,w_qmax
49  real*8 xqq,gfact
50  real wid_a1_fitkkpi
51 
52 
53  INTEGER ifirst,itype
54  DATA ifirst,itype /0,1/
55  INTEGER imode,iinit
56 ! DATA IMODE /0/
57 
58 
59 C. READING TABLE AND INITIALIZATION
60 C. ================================
61 
62  IF (ifirst.EQ.0) THEN
63  ifirst = 1
64 C Initialization from automatically created routine
65  call inita1tab(qk_min ,w_qmin )
66  qmax = qk_min(nq)
67  qmin = qk_min(1)
68  del_qq = (qmax-qmin)/float(nq-1)
69  ENDIF
70 
71  CALL ifgfact(2,itype,iinit)
72 C ALTERNATIVE CALCULATIONS FOR SPECIAL PURPOSES
73 C. ============================================
74  IF (itype.EQ.0) THEN
75  wid_a1_fit=0
76  RETURN
77  ELSEIF (itype.EQ.2) THEN
78  xqq=qq
79  wid_a1_fit=wid_a1_fitkkpi(qq)+gfact(xqq)
80 ! write(*,*) 'uwaga', wid_a1_fit, wid_a1_fitKKpi(qq)
81  RETURN
82  ENDIF
83 
84 
85 C. INTEPOLATION, for extrapolation values at ends are used
86 C. =======================================================
87  if(qq.gt.qmin.and.qq.le.qmax) then
88  kq = (qq-qmin)/del_qq
89  kq = kq +1
90 
91  qk_max = qk_min(kq+1)
92  w_qmax = w_qmin(kq+1)
93 
94  aq = (w_qmax-w_qmin(kq))/(qk_max-qk_min(kq))
95  bq = (w_qmax*qk_min(kq) -w_qmin(kq)*qk_max)
96  $ /(qk_min(kq)-qk_max)
97  wid_a1_fit = aq*qq+bq
98 
99  elseif(qq.ge.qmax) then ! above maximun
100  wid_a1_fit = w_qmin(nq)
101 
102  else ! below minimum
103  wid_a1_fit = w_qmin(1)
104 
105  endif
106 
107  return
108  end
109 
110