Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pythrg.f
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file pythrg.f
1 
2 C*********************************************************************
3 
4 C...PYTHRG
5 C...Calculates the mass eigenstates of the third generation sfermions.
6 C...Created: 5-31-96
7 
8  SUBROUTINE pythrg
9 
10 C...Double precision and integer declarations.
11  IMPLICIT DOUBLE PRECISION(a-h, o-z)
12  IMPLICIT INTEGER(i-n)
13  INTEGER pyk,pychge,pycomp
14 C...Parameter statement to help give large particle numbers.
15  parameter(ksusy1=1000000,ksusy2=2000000,ktechn=3000000,
16  &kexcit=4000000,kdimen=5000000)
17 C...Commonblocks.
18  common/pydat1/mstu(200),paru(200),mstj(200),parj(200)
19  common/pydat2/kchg(500,4),pmas(500,4),parf(2000),vckm(4,4)
20  common/pymssm/imss(0:99),rmss(0:99)
21  common/pyssmt/zmix(4,4),umix(2,2),vmix(2,2),smz(4),smw(2),
22  &sfmix(16,4),zmixi(4,4),umixi(2,2),vmixi(2,2)
23  SAVE /pydat1/,/pydat2/,/pymssm/,/pyssmt/
24 
25 C...Local variables.
26  DOUBLE PRECISION beta
27  DOUBLE PRECISION am2(2,2),rt(2,2),di(2,2)
28  DOUBLE PRECISION xmz2,xmw2,tanb,xmu,cos2b,xmql2,xmqr2
29  DOUBLE PRECISION xmf,xmf2,diff,same,xmf12,xmf22,small
30  DOUBLE PRECISION atr,amqr,amql
31  INTEGER id1(3),id2(3),id3(3),id4(3)
32  INTEGER if,i,j,ii,jj,it,l
33  LOGICAL dterm
34  DATA small/1d-3/
35  DATA id1/10,10,13/
36  DATA id2/5,6,15/
37  DATA id3/15,16,17/
38  DATA id4/11,12,14/
39  DATA dterm/.true./
40 
41  xmz2=pmas(23,1)**2
42  xmw2=pmas(24,1)**2
43  tanb=rmss(5)
44  xmu=-rmss(4)
45  beta=atan(tanb)
46  cos2b=cos(2d0*beta)
47 
48 C...OPTION TO FIX T1, T2, B1 MASSES AND MIXINGS
49 
50  iopt=imss(5)
51  IF(iopt.EQ.1) THEN
52  ctt=dcos(rmss(27))
53  ctt2=ctt**2
54  stt=dsin(rmss(27))
55  stt2=stt**2
56  xm12=rmss(10)**2
57  xm22=rmss(12)**2
58  xmql2=ctt2*xm12+stt2*xm22
59  xmqr2=stt2*xm12+ctt2*xm22
60  xmf2=pymrun(6,pmas(6,1)**2)**2
61  atop=-xmu/tanb+ctt*stt*(xm12-xm22)/sqrt(xmf2)
62  rmss(16)=atop
63 C......SUBTRACT OUT D-TERM AND FERMION MASS
64  xmql2=xmql2-xmf2-(4d0*xmw2-xmz2)*cos2b/6d0
65  xmqr2=xmqr2-xmf2+(xmw2-xmz2)*cos2b*2d0/3d0
66  IF(xmql2.GE.0d0) THEN
67  rmss(10)=sqrt(xmql2)
68  ELSE
69  rmss(10)=-sqrt(-xmql2)
70  ENDIF
71  IF(xmqr2.GE.0d0) THEN
72  rmss(12)=sqrt(xmqr2)
73  ELSE
74  rmss(12)=-sqrt(-xmqr2)
75  ENDIF
76 
77 C SAME FOR BOTTOM SQUARK
78  ctt=dcos(rmss(26))
79  ctt2=ctt**2
80  stt=dsin(rmss(26))
81  stt2=stt**2
82  xm22=rmss(11)**2
83  xmf2=pymrun(5,pmas(6,1)**2)**2
84  xmql2=sign(rmss(10)**2,rmss(10))-(2d0*xmw2+xmz2)*cos2b/6d0+xmf2
85  IF(abs(ctt).GE..9999d0) THEN
86  abot=-xmu*tanb
87  xmqr2=rmss(11)**2
88  ELSEIF(abs(ctt).LE.1d-4) THEN
89  abot=-xmu*tanb
90  xmqr2=rmss(11)**2
91  ELSE
92  xm12=(xmql2-stt2*xm22)/ctt2
93  xmqr2=stt2*xm12+ctt2*xm22
94  abot=-xmu*tanb+ctt*stt*(xm12-xm22)/sqrt(xmf2)
95  ENDIF
96  rmss(15)=abot
97 C......SUBTRACT OUT D-TERM AND FERMION MASS
98  xmqr2=xmqr2-(xmw2-xmz2)*cos2b/3d0-xmf2
99  IF(xmqr2.GE.0d0) THEN
100  rmss(11)=sqrt(xmqr2)
101  ELSE
102  rmss(11)=-sqrt(-xmqr2)
103  ENDIF
104 C SAME FOR TAU SLEPTON
105  ctt=dcos(rmss(28))
106  ctt2=ctt**2
107  stt=dsin(rmss(28))
108  stt2=stt**2
109  xm12=rmss(13)**2
110  xm22=rmss(14)**2
111  xmql2=ctt2*xm12+stt2*xm22
112  xmqr2=stt2*xm12+ctt2*xm22
113  xmfr=pmas(15,1)
114  xmf2=xmfr**2
115  atau=-xmu*tanb+ctt*stt*(xm12-xm22)/sqrt(xmf2)
116  rmss(17)=atau
117 C......SUBTRACT OUT D-TERM AND FERMION MASS
118  xmql2=xmql2-xmf2+(-.5d0*xmz2+xmw2)*cos2b
119  xmqr2=xmqr2-xmf2+(xmz2-xmw2)*cos2b
120  IF(xmql2.GE.0d0) THEN
121  rmss(13)=sqrt(xmql2)
122  ELSE
123  rmss(13)=-sqrt(-xmql2)
124  ENDIF
125  IF(xmqr2.GE.0d0) THEN
126  rmss(14)=sqrt(xmqr2)
127  ELSE
128  rmss(14)=-sqrt(-xmqr2)
129  ENDIF
130  ENDIF
131  DO 170 l=1,3
132  amql=rmss(id1(l))
133  IF(amql.LT.0d0) THEN
134  xmql2=-amql**2
135  ELSE
136  xmql2=amql**2
137  ENDIF
138  atr=rmss(id3(l))
139  amqr=rmss(id4(l))
140  IF(amqr.LT.0d0) THEN
141  xmqr2=-amqr**2
142  ELSE
143  xmqr2=amqr**2
144  ENDIF
145  if=id2(l)
146  xmf=pymrun(IF,pmas(6,1)**2)
147  xmf2=xmf**2
148  am2(1,1)=xmql2+xmf2
149  am2(2,2)=xmqr2+xmf2
150  IF(am2(1,1).EQ.am2(2,2)) am2(2,2)=am2(2,2)*1.00001d0
151  IF(dterm) THEN
152  IF(l.EQ.1) THEN
153  am2(1,1)=am2(1,1)-(2d0*xmw2+xmz2)*cos2b/6d0
154  am2(2,2)=am2(2,2)+(xmw2-xmz2)*cos2b/3d0
155  am2(1,2)=xmf*(atr+xmu*tanb)
156  ELSEIF(l.EQ.2) THEN
157  am2(1,1)=am2(1,1)+(4d0*xmw2-xmz2)*cos2b/6d0
158  am2(2,2)=am2(2,2)-(xmw2-xmz2)*cos2b*2d0/3d0
159  am2(1,2)=xmf*(atr+xmu/tanb)
160  ELSEIF(l.EQ.3) THEN
161  IF(imss(8).EQ.1) THEN
162  am2(1,1)=rmss(6)**2
163  am2(2,2)=rmss(7)**2
164  am2(1,2)=0d0
165  rmss(13)=rmss(6)
166  rmss(14)=rmss(7)
167  ELSE
168  am2(1,1)=am2(1,1)-(-.5d0*xmz2+xmw2)*cos2b
169  am2(2,2)=am2(2,2)-(xmz2-xmw2)*cos2b
170  am2(1,2)=xmf*(atr+xmu*tanb)
171  ENDIF
172  ENDIF
173  ENDIF
174  am2(2,1)=am2(1,2)
175  detm=am2(1,1)*am2(2,2)-am2(2,1)**2
176  IF(detm.LT.0d0) THEN
177  WRITE(mstu(11),*) id2(l),detm,am2
178  CALL pyerrm(30,' NEGATIVE**2 MASS FOR SFERMION IN PYTHRG ')
179  ENDIF
180  same=0.5d0*(am2(1,1)+am2(2,2))
181  diff=0.5d0*sqrt((am2(1,1)-am2(2,2))**2+4d0*am2(1,2)*am2(2,1))
182  xmf12=same-diff
183  xmf22=same+diff
184  it=0
185  IF(xmf22-xmf12.GT.0d0) THEN
186  rt(1,1) = sqrt(max(0d0,(xmf22-am2(1,1))/(xmf22-xmf12)))
187  rt(2,2) = rt(1,1)
188  rt(1,2) = -sign(sqrt(max(0d0,1d0-rt(1,1)**2)),
189  & am2(1,2)/(xmf22-xmf12))
190  rt(2,1) = -rt(1,2)
191  ELSE
192  rt(1,1) = 1d0
193  rt(2,2) = rt(1,1)
194  rt(1,2) = 0d0
195  rt(2,1) = -rt(1,2)
196  ENDIF
197  100 CONTINUE
198  it=it+1
199 
200  DO 140 i=1,2
201  DO 130 jj=1,2
202  di(i,jj)=0d0
203  DO 120 ii=1,2
204  DO 110 j=1,2
205  di(i,jj)=di(i,jj)+rt(i,j)*am2(j,ii)*rt(jj,ii)
206  110 CONTINUE
207  120 CONTINUE
208  130 CONTINUE
209  140 CONTINUE
210 
211  IF(di(1,1).GT.di(2,2)) THEN
212  WRITE(mstu(11),*) ' ERROR IN DIAGONALIZATION '
213  WRITE(mstu(11),*) l,sqrt(xmf12),sqrt(xmf22)
214  WRITE(mstu(11),*) am2
215  WRITE(mstu(11),*) di
216  WRITE(mstu(11),*) rt
217  di(1,1)=-rt(2,1)
218  di(2,2)=rt(1,2)
219  di(1,2)=-rt(2,2)
220  di(2,1)=rt(1,1)
221  DO 160 i=1,2
222  DO 150 j=1,2
223  rt(i,j)=di(i,j)
224  150 CONTINUE
225  160 CONTINUE
226  goto 100
227  ELSEIF(abs(di(1,2)*di(2,1)/di(1,1)/di(2,2)).GT.small) THEN
228  WRITE(mstu(11),*) ' ERROR IN DIAGONALIZATION,'//
229  & ' OFF DIAGONAL ELEMENTS '
230  WRITE(mstu(11),*) 'MASSES = ',l,sqrt(xmf12),sqrt(xmf22)
231  WRITE(mstu(11),*) di
232  WRITE(mstu(11),*) ' ROTATION = ',rt
233 C...STOP
234  ELSEIF(di(1,1).LT.0d0.OR.di(2,2).LT.0d0) THEN
235  WRITE(mstu(11),*) ' ERROR IN DIAGONALIZATION,'//
236  & ' NEGATIVE MASSES '
237  CALL pystop(111)
238  ENDIF
239  pmas(pycomp(ksusy1+if),1)=sqrt(xmf12)
240  pmas(pycomp(ksusy2+if),1)=sqrt(xmf22)
241  sfmix(IF,1)=rt(1,1)
242  sfmix(IF,2)=rt(1,2)
243  sfmix(IF,3)=rt(2,1)
244  sfmix(IF,4)=rt(2,2)
245  170 CONTINUE
246 
247 C.....TAU SNEUTRINO MASS...L=3
248 
249  xarg=am2(1,1)+xmw2*cos2b
250  IF(xarg.LT.0d0) THEN
251  WRITE(mstu(11),*) ' PYTHRG:: TAU SNEUTRINO MASS IS NEGATIVE'//
252  & ' FROM THE SUM RULE. '
253  WRITE(mstu(11),*) ' TRY A SMALLER VALUE OF TAN(BETA). '
254  RETURN
255  ELSE
256  pmas(pycomp(ksusy1+16),1)=sqrt(xarg)
257  ENDIF
258 
259  RETURN
260  END