]>
Commit | Line | Data |
---|---|---|
a31fa5b0 | 1 | *---------------------------------------------------------------------- |
2 | * | |
3 | * Filename : PYQUEN.F | |
4 | * | |
5 | * First version created: 20-AUG-1997 Author : Igor Lokhtin | |
6 | * Last revision : 15-JUN-2004 | |
7 | * | |
8 | *====================================================================== | |
9 | * | |
10 | * Description : Event generator for simulation of parton rescattering | |
11 | * and energy loss in quark-gluon plasma created in heavy | |
12 | * ion AA collisons at LHC | |
13 | * (implemented as modification of standard pythia jet event) | |
14 | * | |
15 | * Method : I.P.Lokhtin, A.M.Snigirev, Eur.Phys.J. C16 (2000) 527-536; | |
16 | * I.P.Lokhtin, A.M.Snigirev, e-print hep-ph/0406038. | |
17 | * | |
18 | * | |
19 | *====================================================================== | |
20 | ||
21 | SUBROUTINE PYQUEN(A,ifb,bfix) | |
22 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
23 | IMPLICIT INTEGER(I-N) | |
24 | INTEGER PYK,PYCHGE,PYCOMP | |
25 | external pydata | |
26 | external pyp,pyr,pyk,pyjoin | |
27 | external ftaa,funbip | |
28 | common /pyjets/ n,npad,k(4000,5),p(4000,5),v(4000,5) | |
29 | common /pydat1/ mstu(200),paru(200),mstj(200),parj(200) | |
30 | common /pysubs/ msel,mselpd,msub(500),kfin(2,-40:40),ckin(200) | |
31 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
32 | common /plglur/ glur(1000,4),kglu(1000,6),nrg | |
33 | common /parimp/ b1,psib1,rb1,rb2 | |
34 | common /bintaa/ br | |
35 | common /plfpar/ bgen | |
36 | save /pyjets/, /pydat1/, /pysubs/, /plglur/ | |
37 | dimension ijoin(1000),nis(100),nss(100),nas(100),nus(100) | |
38 | ||
39 | * set initial event paramters | |
40 | AW=A ! atomic weight | |
41 | RA=1.15d0*AW**0.333333d0 ! nucleus radius in fm | |
42 | RA2=2.d0*RA | |
43 | nf=0 ! number of active flavours in QGP | |
44 | TC=0.2d0 ! crutical temperature | |
45 | tau0=0.1d0 ! proper time of QGP formation | |
46 | mvisc=0 ! flag of QGP viscosity (off here) | |
47 | * | |
48 | pi=3.14159d0 | |
49 | ||
50 | * avoid stopping run if pythia does not conserve energy due to collisional loss | |
51 | mstu(21)=1 | |
52 | ||
53 | * generate impact parameter of A-A collision with jet production | |
54 | if(ifb.eq.0) then | |
55 | if(bfix.lt.0.d0) then | |
56 | write(6,*) 'Impact parameter less than zero!' | |
57 | bfix=0.d0 | |
58 | end if | |
59 | if (bfix.gt.RA2) then | |
60 | write(6,*) 'Impact parameter larger than two nuclear radius!' | |
61 | bfix=RA2 | |
62 | end if | |
63 | b1=bfix | |
64 | else | |
65 | call bipsear(fmax1,xmin1) | |
66 | fmax=fmax1 | |
67 | xmin=xmin1 | |
68 | 11 bb1=xmin*pyr(0) | |
69 | ff1=fmax*pyr(0) | |
70 | fb=funbip(bb1) | |
71 | if(ff1.gt.fb) goto 11 | |
72 | b1=bb1 | |
73 | end if | |
74 | bgen=b1 | |
75 | ||
76 | * calculate initial QGP temperature as function of centrality | |
77 | sb0=pi*RA*RA | |
78 | sb=RA*RA*(pi-2.d0*dasin(0.5d0*b1/RA))-b1*dsqrt(abs(RA*RA- | |
79 | > b1*b1/4.d0)) | |
80 | rtaa0=9.d0*AW*AW/(8.d0*sb0) | |
81 | br=max(1.d-10,b1*b1/(4.d0*RA*RA)) | |
82 | call simpa(0.d0,20.d0,0.001d0,0.001d0,1.d-08,ftaa,xx,rest, | |
83 | > aih,aiabs) | |
84 | rtaa=rtaa0*(1.d0-br*(1.d0+(1.d0-0.25d0*br)*dlog(1.d0/br)+ | |
85 | > 4.d0*rest/pi)) | |
86 | T00=((rtaa*sb0)/(rtaa0*sb))**0.25d0 | |
87 | T0=T00*(AW/207.d0)**0.166667d0 | |
88 | ||
89 | * generate single event with partonic energy loss | |
90 | ehard=ckin(3) | |
91 | if(b1.le.1.85d0*RA) then | |
92 | call plinit(ehard) | |
93 | call plevnt(ehard) | |
94 | end if | |
95 | ||
96 | * stop generate event if there are no in-medium emitted gluons | |
97 | if(nrg.lt.1) goto 1 | |
98 | ||
99 | * define number of stirngs (ns) and number of entries in strings before | |
100 | * in-medium radiation (nis(ns)) | |
101 | ns=0 | |
102 | nes=0 | |
103 | i0=0 | |
104 | i1=0 | |
105 | do i=1,100 | |
106 | nis(i)=0 | |
107 | nas(i)=0 | |
108 | nss(i)=0 | |
109 | nus(i)=0 | |
110 | end do | |
111 | do i=9,n | |
112 | ks=k(i,1) | |
113 | ksp=k(i-1,1) | |
114 | if(ks.eq.2) then | |
115 | nis(ns+1)=nis(ns+1)+1 | |
116 | elseif(ks.eq.1.and.nis(ns+1).gt.0) then | |
117 | nis(ns+1)=nis(ns+1)+1 | |
118 | nes=nes+nis(ns+1) ! nes - total number if entries | |
119 | nss(ns+1)=nes | |
120 | ns=ns+1 | |
121 | elseif(ks.ne.2.and.ksp.ne.2.and.ns.gt.0) then | |
122 | i1=i1+1 ! last i1 lines not included in strings | |
123 | end if | |
124 | end do | |
125 | i0=n-nes-i1 ! first i0 lines not included in strings | |
126 | do i=1,ns | |
127 | nss(i)=nss(i)+i0 | |
128 | end do | |
129 | ||
130 | * move fragmented particles in bottom of event list | |
131 | icount = 0 | |
132 | i=i0+1 | |
133 | 2 ks=k(i,1) | |
134 | icount = icount + 1 | |
135 | if (icount > 200) stop | |
136 | ksp=k(i-1,1) | |
137 | if(ks.ne.2.and.ksp.ne.2) then | |
138 | n=n+1 | |
139 | do j=1,5 | |
140 | v(n,j)=v(i,j) | |
141 | k(n,j)=k(i,j) | |
142 | p(n,j)=p(i,j) | |
143 | end do | |
144 | do in=i+1,n | |
145 | do j=1,5 | |
146 | v(in-1,j)=v(in,j) | |
147 | k(in-1,j)=k(in,j) | |
148 | p(in-1,j)=p(in,j) | |
149 | end do | |
150 | end do | |
151 | do ip=1,nrg | |
152 | ku=kglu(ip,6) | |
153 | if(ku.gt.i) kglu(ip,6)=ku-1 | |
154 | end do | |
155 | n=n-1 | |
156 | else | |
157 | i=i+1 | |
158 | end if | |
159 | if(i.le.n-i1) goto 2 | |
160 | * define number of additional entries in strings, nas(ns) | |
161 | do i=1,nrg | |
162 | kas=kglu(i,6) | |
163 | if(kas.le.nss(1)) then | |
164 | nas(1)=nas(1)+1 | |
165 | else | |
166 | do j=2,ns | |
167 | if(kas.le.nss(j).and.kas.gt.nss(j-1)) | |
168 | > nas(j)=nas(j)+1 | |
169 | end do | |
170 | end if | |
171 | end do | |
172 | do j=1,ns | |
173 | do i=1,j | |
174 | nus(j)=nus(j)+nas(i) | |
175 | end do | |
176 | end do | |
177 | ||
178 | * add emitted gluons in event list | |
179 | nu=n | |
180 | n=n+nrg | |
181 | do i=nu,nu-i1,-1 | |
182 | is=i+nrg | |
183 | do j=1,5 | |
184 | v(is,j)=v(i,j) | |
185 | k(is,j)=k(i,j) | |
186 | p(is,j)=p(i,j) | |
187 | end do | |
188 | end do | |
189 | do ia=ns-1,1,-1 | |
190 | do i=nss(ia+1)-1,nss(ia),-1 | |
191 | is=i+nus(ia) | |
192 | do j=1,5 | |
193 | v(is,j)=v(i,j) | |
194 | k(is,j)=k(i,j) | |
195 | p(is,j)=p(i,j) | |
196 | end do | |
197 | end do | |
198 | end do | |
199 | ||
200 | do i=1,nrg | |
201 | if(i.le.nus(1)) then | |
202 | ia=nss(1)-1+i | |
203 | else | |
204 | do in=2,ns | |
205 | if(i.le.nus(in).and.i.gt.nus(in-1)) | |
206 | > ia=nss(in)-1+i | |
207 | end do | |
208 | end if | |
209 | eg=glur(i,1) | |
210 | ptg=glur(i,2) | |
211 | phig=glur(i,3) | |
212 | etag=glur(i,4) | |
213 | do j=1,5 | |
214 | v(ia,j)=0.d0 | |
215 | k(ia,j)=kglu(i,j) | |
216 | end do | |
217 | p(ia,1)=ptg*dcos(phig) | |
218 | p(ia,2)=ptg*dsin(phig) | |
219 | p(ia,3)=dsqrt(abs(eg*eg-ptg*ptg)) | |
220 | if(etag.lt.0.d0) p(ia,3)=-1.*p(ia,3) | |
221 | p(ia,4)=eg | |
222 | p(ia,5)=0.d0 | |
223 | end do | |
224 | ||
225 | * rearrange partons to form strings | |
226 | do ij=1,1000 | |
227 | ijoin(ij)=0 | |
228 | end do | |
229 | do i=1,ns | |
230 | njoin=nis(i)+nas(i) | |
231 | if(i.eq.1) then | |
232 | do j=1,njoin | |
233 | ijoin(j)=i0+j | |
234 | end do | |
235 | else | |
236 | do j=1,njoin | |
237 | ijoin(j)=nss(i-1)+nus(i-1)+j | |
238 | end do | |
239 | end if | |
240 | call pyjoin(njoin,ijoin) | |
241 | end do | |
242 | ||
243 | 1 continue | |
244 | ||
245 | return | |
246 | end | |
247 | ||
248 | ********************************* PLINIT *************************** | |
249 | SUBROUTINE PLINIT(ET) | |
250 | * set nucleus thikness and plasma parameters | |
251 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
252 | IMPLICIT INTEGER(I-N) | |
253 | INTEGER PYK,PYCHGE,PYCOMP | |
254 | external plvisc | |
255 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
256 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
257 | common /plevol/ taup(5000),temp(5000),denp(5000),enep(5000) | |
258 | save /plevol/ | |
259 | * | |
260 | pi=3.14159d0 | |
261 | pi2=pi*pi | |
262 | ||
263 | * set number degrees of freedom in QGP | |
264 | hgd=3.d0 | |
265 | rg=(16.d0+10.5d0*nf)/hgd | |
266 | rgn=(16.d0+9.d0*nf)/hgd | |
267 | ||
268 | * set 'fiction' sigma for parton rescattering in QGP | |
269 | sigqq=4.2d0 | |
270 | sigpl=2.25d0*2.25d0*sigqq*(16.d0+4.d0*nf)/(16.d0+9.d0*nf) | |
271 | ||
272 | * set intial plasma temperature, density and energy density in perfect | |
273 | * (if mvisc=0) or viscous (mvisc=1,2) QGP with PLVISC subroitine | |
274 | hst=0.15d0 | |
275 | if(mvisc.eq.2.and.T0.gt.0.6d0) hst=0.25d0 | |
276 | T01=T0*5.06d0 | |
277 | TC1=TC*5.06d0 | |
278 | pln0=(16.d0+9.d0*nf)*1.2d0*(T01**3)/pi2 | |
279 | ened0=pi2*(16.d0+10.5d0*nf)*(T01**4)/30.d0 | |
280 | hh=hst*tau0 | |
281 | tau=tau0 ! proper time | |
282 | T=T01 ! temperature | |
283 | den=pln0 ! number density | |
284 | ened=ened0 ! energy density | |
285 | ||
286 | * create array of parameters to configurate QGP time evolution | |
287 | DO I=1,5000 | |
288 | taup(i)=tau ! proper time | |
289 | temp(i)=T/5.06d0 ! temperature | |
290 | denp(i)=den ! number density | |
291 | enep(i)=ened/5.06d0 ! energy density | |
292 | ened1=0.5d0*hh*(1.3333d0*plvisc(T)/(tau*tau)-1.3333d0 | |
293 | > *ened/tau)+ened | |
294 | T1=(30.d0*ened1/((16.d0+10.5d0*nf)*pi2))**0.25d0 | |
295 | tau1=tau+0.5d0*hh | |
296 | ened=hh*(1.3333d0*plvisc(T1)/(tau1*tau1)-1.3333d0 | |
297 | > *ened1/tau1)+ened | |
298 | TPR=T | |
299 | T=(30.d0*ened/((16.d0+10.5d0*nf)*pi2))**0.25d0 | |
300 | den=(16.d0+9.d0*nf)*1.2d0*(T**3)/pi2 | |
301 | tau=tau+hh | |
302 | if(TPR.gt.TC1.and.T.le.TC1) taupl=tau-0.5d0*hh ! QGP lifetime taupl | |
303 | END DO | |
304 | tauh=taupl*rg ! mixed phase lifetime | |
305 | ||
306 | return | |
307 | end | |
308 | ******************************** END PLINIT ************************** | |
309 | ||
310 | ******************************* PLEVNT ****************************** | |
311 | SUBROUTINE PLEVNT(ET) | |
312 | * generate hard parton production vertex and passing with rescattering, | |
313 | * collisional and radiative energy loss of each parton through plasma | |
314 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
315 | IMPLICIT INTEGER(I-N) | |
316 | INTEGER PYK,PYCHGE,PYCOMP | |
317 | external plthik, pln, plt, pls, gauss, gluang | |
318 | external pyp,pyr,pyk | |
319 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
320 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
321 | common /thikpa/ fmax,xmin | |
322 | common /pyjets/ n,npad,k(4000,5),p(4000,5),v(4000,5) | |
323 | common /plglur/ glur(1000,4),kglu(1000,6),nrg | |
324 | common /factor/ cfac, kf | |
325 | common /pleave/ taul, temlev | |
326 | common /parimp/ b1, psib1, rb1, rb2 | |
327 | common /plen/ epartc, um | |
328 | common /plos/ elr,rsk | |
329 | common /numje1/ nuj1, nuj2 | |
330 | save /pyjets/, /plglur/ | |
331 | * | |
332 | pi=3.14159d0 | |
333 | ||
334 | * find minimum of nuclear thikness function with subroutine plsear | |
335 | psib1=pi*(2.d0*pyr(0)-1.d0) | |
336 | call plsear (fmax1,xmin1) | |
337 | fmax=fmax1 | |
338 | xmin=xmin1 | |
339 | ||
340 | * generate vertex of jet production | |
341 | iv=0 | |
342 | 1 rr1=xmin*pyr(0) | |
343 | ff1=fmax*pyr(0) | |
344 | f=plthik(rr1) | |
345 | iv=iv+1 | |
346 | if(ff1.gt.f.and.iv.le.100000) goto 1 | |
347 | r0=rr1 | |
348 | rb1=dsqrt(abs(r0*r0+b1*b1/4.d0+r0*b1*dcos(psib1))) | |
349 | rb2=dsqrt(abs(r0*r0+b1*b1/4.d0-r0*b1*dcos(psib1))) | |
350 | rb1=max(rb1,1.d-4) | |
351 | rb2=max(rb2,1.d-4) | |
352 | ||
353 | * find maximum of angular spectrum of radiated gluons with subroutine gluang | |
354 | temin=0.5d0*pi | |
355 | temax=0.5d0*(1.d0+dsqrt(5.d0))*0.0863d0 | |
356 | ftemax=gluang(temax) | |
357 | ||
358 | * reset all radiated gluon 4-momenta and codes to zero ------------------- | |
359 | do i=1,1000 | |
360 | do j=1,4 | |
361 | glur(i,j)=0.d0 | |
362 | kglu(i,j)=0 | |
363 | end do | |
364 | kglu(i,5)=0 | |
365 | kglu(i,6)=0 | |
366 | end do | |
367 | nrg=0 | |
368 | ||
369 | * generate changing 4-momentum of partons due to rescattering and energy loss | |
370 | * (for partons with |eta|<3 and p>5 GeV/c) | |
371 | nuj1=7 ! minimum number of rescattered parton | |
372 | nuj2=n ! maximum number of rescattered parton | |
373 | do 2 ip=nuj1,nuj2 ! cycle on travelling partons | |
374 | irasf=0 | |
375 | iraz=0 | |
376 | ks=k(ip,1) ! parton status code | |
377 | kf=k(ip,2) ! parton identificator | |
378 | ka=abs(kf) | |
379 | epart=abs(pyp(ip,10)) ! parton total momentum | |
380 | etar=pyp(ip,19) ! parton pseudorapidity | |
381 | if(epart.ge.5.d0.and.abs(etar).le.3.d0) then | |
382 | if(ka.eq.21.or.ka.eq.1.or.ka.eq.2.or.ka.eq.3. | |
383 | > or.ka.eq.4.or.ka.eq.5.or.ka.eq.6.or.ka.eq.7. | |
384 | > or.ka.eq.8) then | |
385 | if(ks.eq.2.or.ks.eq.1.or.ks.eq.21) then | |
386 | phir=pyp(ip,15) ! parton azimuthal angle | |
387 | tetr=pyp(ip,13) ! parton polar angle | |
388 | yrr=pyp(ip,17) ! parton rapidity | |
389 | stetr=max(dsin(tetr),1.d-04) ! parton sin(theta) | |
390 | phir1=-1.d0*phir | |
391 | tetr1=-1.d0*tetr | |
392 | ||
393 | * set colour factor | |
394 | if(kf.eq.21) then | |
395 | cfac=1.d0 ! for gluon | |
396 | else | |
397 | cfac=0.44444444d0 ! for quark | |
398 | end if | |
399 | ||
400 | * boost from laboratory system to system of hard parton | |
401 | ipar=ip | |
402 | bet0=(r0*dcos(psib1)+0.5d0*b1)/rb1 | |
403 | if(bet0.le.-1.d0) bet0=-0.99999d0 | |
404 | if(bet0.ge.1.d0) bet0=0.99999d0 | |
405 | bet=dacos(bet0) | |
406 | if(psib1.lt.0.d0) bet=-1.d0*bet | |
407 | phip=phir-bet | |
408 | if(phip.gt.pi) phip=phip-2.d0*pi | |
409 | if(phip.lt.-1.d0*pi) phip=phip+2.d0*pi | |
410 | call pyrobo(0,0,0.d0,phir1,0.d0,0.d0,0.d0) | |
411 | call pyrobo(0,0,tetr1,0.d0,0.d0,0.d0,0.d0) | |
412 | ||
413 | * calculate proper time of parton leaving QGP | |
414 | aphin=(r0*r0-b1*b1/4.d0)/(rb1*rb2) | |
415 | if(aphin.le.-1.d0) aphin=-0.99999d0 | |
416 | if(aphin.ge.1.d0) aphin=0.99999d0 | |
417 | phin=dacos(aphin) | |
418 | if(psib1.le.0.d0) phin=-1.d0*phin | |
419 | phid=phip-phin | |
420 | if(phid.gt.pi) phid=phid-2.d0*pi | |
421 | if(phid.lt.-1.d0*pi) phid=phid+2.d0*pi | |
422 | taul1=abs(dsqrt(abs(RA*RA-(rb1*dsin(phip))**2))-rb1*dcos(phip)) | |
423 | taul2=abs(dsqrt(abs(RA*RA-(rb2*dsin(phid))**2))-rb2*dcos(phid)) | |
424 | taul=min(taul1,taul2) ! escape time taul | |
425 | temlev=plt(taul) ! QGP temperature at taul | |
426 | if(taul.le.tau0) goto 100 ! escape from QGP if taul<tau0 | |
427 | ||
428 | * start parton rescattering in QGP with proper time iterations | |
429 | tau=tau0 | |
430 | 3 tfs=plt(tau) | |
431 | xi=-10.d0*dlog(max(pyr(0),1.d-10))/(sigpl*pln(tau)) | |
432 | vel=abs(p(ip,3))/dsqrt(p(ip,3)**2+p(ip,5)**2) ! parton velocity | |
433 | if(vel.lt.0.3d0) goto 4 | |
434 | tau=tau+xi*vel | |
435 | if(tau.ge.taul.or.tfs.le.TC) goto 100 ! escape if tau>taul or >taupl | |
436 | ||
437 | * transform parton 4-momentum due to next scattering with subroutine pljetr | |
438 | epartc=p(ip,4) ! parton energy | |
439 | um=p(ip,5) ! parton mass | |
440 | sigtr=pls(tfs)*cfac*((p(ip,4)/pyp(ip,8))**2) | |
441 | prob=sigpl/(sigtr/stetr+sigpl) | |
442 | ran=pyr(0) | |
443 | irasf=irasf+1 | |
444 | if(irasf.gt.100000) goto 100 | |
445 | if(ran.lt.prob) goto 3 | |
446 | pltp=plt(tau) | |
447 | pltp3=3.d0*pltp | |
448 | pass=50.6d0/(pln(tau)*sigtr) | |
449 | elr=0.d0 | |
450 | rsk=0.d0 | |
451 | call pljetr(tau,pass,pltp,ipar,epart) | |
452 | irasf=0 | |
453 | ||
454 | * set 4-momentum (in lab system) of next radiated gluon for parton number >8 | |
455 | * and fill arrays of radiated gluons in common block plglur | |
456 | if(nrg.le.1000) then | |
457 | if(abs(elr).gt.0.1d0.and.ip.gt.8) then | |
458 | nrg=nrg+1 | |
459 | 6 te1=temin*pyr(0) | |
460 | fte1=ftemax*pyr(0) | |
461 | fte2=gluang(te1) | |
462 | if(fte1.gt.fte2) goto 6 | |
463 | tgl=te1 ! gaussian angular spectrum | |
464 | c tgl=0.d0 ! collinear angular spectrum | |
465 | c tgl=((0.5d0*pi*epartc)**pyr(0))/epartc ! broad-angular spectrum | |
466 | pgl=pi*(2.d0*pyr(0)-1.d0) | |
467 | pxgl=abs(elr)*(dcos(phir)*dcos(tgl)/dcosh(yrr)+ | |
468 | > dcos(phir)*dsin(tgl)*dcos(pgl)*dsinh(yrr)/dcosh(yrr)- | |
469 | > dsin(phir)*dsin(tgl)*dsin(pgl)) | |
470 | pygl=abs(elr)*(dsin(phir)*dcos(tgl)/dcosh(yrr)+ | |
471 | > dsin(phir)*dsin(tgl)*dcos(pgl)*dsinh(yrr)/dcosh(yrr)+ | |
472 | > dcos(phir)*dsin(tgl)*dsin(pgl)) | |
473 | pzgl=abs(elr)*(dsinh(yrr)*dcos(tgl)-dsin(tgl)*dcos(pgl)) | |
474 | > /dcosh(yrr) | |
475 | ptgl=dsqrt(abs(pxgl*pxgl+pygl*pygl)) | |
476 | psgl=dsqrt(abs(ptgl*ptgl+pzgl*pzgl)) | |
477 | dpgl=pygl/pxgl | |
478 | glur(nrg,1)=abs(elr) ! energy | |
479 | glur(nrg,3)=datan(dpgl) ! phi | |
480 | if(pxgl.lt.0.d0) then | |
481 | if(pygl.ge.0.d0) then | |
482 | glur(nrg,3)=glur(nrg,3)+pi | |
483 | else | |
484 | glur(nrg,3)=glur(nrg,3)-pi | |
485 | end if | |
486 | end if | |
487 | glur(nrg,4)=0.5d0*dlog(max(1.d-9,(psgl+pzgl)/(psgl-pzgl))) ! eta | |
488 | glur(nrg,2)=glur(nrg,1)/dcosh(glur(nrg,4)) ! pt | |
489 | * set gluon codes | |
490 | kglu(nrg,1)=2 ! status code | |
491 | kglu(nrg,2)=21 ! particle identificator | |
492 | kglu(nrg,3)=k(ipar,3) ! parent line number | |
493 | kglu(nrg,4)=0 ! special colour info | |
494 | kglu(nrg,5)=0 ! special colour info | |
495 | kglu(nrg,6)=ipar ! associated parton number | |
496 | end if | |
497 | else | |
498 | write(6,*) 'Warning! Number of emitted gluons is too large!' | |
499 | end if | |
500 | ||
501 | * set parton "thermalization" if pt<T | |
502 | if(abs(p(ip,3)).gt.pltp3) goto 3 | |
503 | 4 continue | |
504 | if(p(ip,3).ge.0.d0) then | |
505 | sigp=1.d0 | |
506 | else | |
507 | sigp=-1.d0 | |
508 | end if | |
509 | 5 iraz=iraz+1 | |
510 | if(iraz.gt.100000) goto 100 | |
511 | ep0=-0.15d0*(dlog(max(1.d-10,pyr(0)))+dlog(max(1.d-10,pyr(0)))+ | |
512 | > dlog(max(1.d-10,pyr(0)))) | |
513 | if(ep0.le.p(ip,5).or.ep0.ge.100.d0) goto 5 | |
514 | pp0=dsqrt(abs(ep0**2-p(ip,5)**2)) | |
515 | probt=pp0/ep0 | |
516 | if(pyr(0).gt.probt) goto 5 | |
517 | ctp0=2.d0*pyr(0)-1.d0 | |
518 | stp0=dsqrt(abs(1.d0-ctp0**2)) | |
519 | php0=pi*(2.d0*pyr(0)-1.d0) | |
520 | p(ip,1)=pp0*stp0*dcos(php0) | |
521 | p(ip,2)=pp0*stp0*dsin(php0) | |
522 | p(ip,3)=sigp*pp0*ctp0 | |
523 | p(ip,4)=dsqrt(p(ip,1)**2+p(ip,2)**2+p(ip,3)**2+p(ip,5)**2) | |
524 | ||
525 | * boost to laboratory system | |
526 | 100 call pyrobo(0,0,tetr,phir,0.d0,0.d0,0.d0) | |
527 | end if | |
528 | end if | |
529 | end if | |
530 | 2 continue | |
531 | ||
532 | return | |
533 | end | |
534 | ******************************* END PLEVNT ************************* | |
535 | ||
536 | ******************************* PLJETR ***************************** | |
537 | SUBROUTINE PLJETR(tau,y,x,ip,epart) | |
538 | * transform parton 4-momentum due to scattering in plasma at time = tau | |
539 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
540 | IMPLICIT INTEGER(I-N) | |
541 | INTEGER PYK,PYCHGE,PYCOMP | |
542 | external plfun1, pls | |
543 | external pyp,pyr | |
544 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
545 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
546 | common /pyjets/ n,npad,k(4000,5),p(4000,5),v(4000,5) | |
547 | common /pljdat/ ej, z, ygl, alfs, um, epa | |
548 | common /pleave/ taul, temlev | |
549 | common /radcal/ aa, bb | |
550 | common /factor/ cfac, kf | |
551 | common /plos/ elr,rsk | |
552 | save /pyjets/ | |
553 | * | |
554 | pi=3.14159d0 | |
555 | spi=dsqrt(pi) | |
556 | tauu=x ! redenote temerature tauu=x | |
557 | i=ip ! redenote parton number i=ip | |
558 | iter=0 | |
559 | iraz=0 | |
560 | ||
561 | * boost to system of comoving plasma constituent | |
562 | phir=pyp(i,15) ! parton phi | |
563 | tetr=pyp(i,13) ! parton theta | |
564 | stetr=max(dsin(tetr),1.d-08) ! parton sin(theta) | |
565 | phir1=-1.d0*phir | |
566 | tetr1=-1.d0*tetr | |
567 | call pyrobo(0,0,0.d0,phir1,0.d0,0.d0,0.d0) | |
568 | call pyrobo(0,0,tetr1,0.d0,0.d0,0.d0,0.d0) | |
569 | pp=pyp(i,8) ! parton total momentum | |
570 | ppl=abs(p(i,3)) ! parton pz | |
571 | um=p(i,5) ! parton mass | |
572 | epa=p(i,4) ! parton energy | |
573 | ppt=pyp(i,10) ! parton pt | |
574 | pphi=pyp(i,15) ! parton phi | |
575 | ||
576 | if(ppl.lt.3.d0) goto 222 ! no energy loss if pz<3 GeV/c | |
577 | ||
578 | * generation hard parton-plasma scattering with momentum transfer rsk | |
579 | 221 ep0=-1.*tauu*(dlog(max(1.d-10,pyr(0)))+dlog(max(1.d-10, | |
580 | > pyr(0)))+dlog(max(1.d-10,pyr(0)))) ! energy of 'thermal' parton | |
581 | iter=iter+1 | |
582 | if(ep0.lt.1.d-10.and.iter.le.100000) goto 221 | |
583 | scm=2.*ep0*epa+um*um+ep0*ep0 | |
584 | qm2=(scm-((um+ep0)**2))*(scm-((um-ep0)**2))/scm | |
585 | bub=4.d0*tauu/TC | |
586 | alf=6.d0*pi/((33.d0-2.d0*nf)*dlog(max(bub,1.d-10))) | |
587 | z=pi*4.d0*tauu*tauu*alf*(1.+nf/6.d0) | |
588 | bubs=dsqrt(abs(z))/TC | |
589 | alfs=6.d0*pi/((33.d0-2.d0*nf)*dlog(max(bubs,1.d-10))) | |
590 | phmin2=z | |
591 | phmax2=max(phmin2,qm2) | |
592 | fqmax2=1.d0/(dlog(max(phmin2/(TC*TC),1.d-10)))**2 | |
593 | 12 rn1=pyr(0) | |
594 | tp=1.d0/(rn1/phmax2+(1.d0-rn1)/phmin2) | |
595 | ftp=1.d0/(dlog(max(tp/(TC*TC),1.d-10)))**2 | |
596 | fprob=ftp/fqmax2 | |
597 | rn2=pyr(0) | |
598 | if(fprob.lt.rn2) goto 12 | |
599 | rsk=dsqrt(abs(tp)) | |
600 | if(rsk.gt.ppl) rsk=ppl | |
601 | ||
602 | * calculate radiative energy loss per given scattering with subroutin plfun1 | |
603 | ygl=y*cfac ! mean gluon free path in GeV^{-1} | |
604 | elp=ygl*z ! mimimum radiated energy in LPM regime | |
605 | ej=ppl | |
606 | bb=ej ! maximum radiated energy | |
607 | bbi=max(dsqrt(abs(z)),1.000001d0*elp) | |
608 | aa=min(bb,bbi) ! minimum radiated energy | |
609 | hh=0.00001d0*(bb-aa) | |
610 | REPS=0.01d0 | |
611 | AEPS=1.d-8 | |
612 | CALL SIMPA(aa,bb,hh,REPS,AEPS,plfun1,om,resun,AIH,AIABS) | |
613 | * ! integral over omega for radiative loss | |
614 | call radsear(ermax1,eomin1) | |
615 | ermax=ermax1 | |
616 | eomin=eomin1 | |
617 | 11 resu=eomin*pyr(0)+aa | |
618 | fres=ermax*pyr(0) | |
619 | fres1=plfun1(resu) | |
620 | iraz=iraz+1 | |
621 | if(fres.gt.fres1.and.iraz.lt.100000) goto 11 | |
622 | elr=resu*resun ! energy of radiated gluon | |
623 | ||
624 | * to chancel radiative energy loss (optional case) | |
625 | c elr=0.d0 | |
626 | * to chancel collisional energy loss (optional case) | |
627 | c rsk=0.d0 | |
628 | ||
629 | * determine the direction of parton moving | |
630 | if(p(i,3).ge.0.d0) then | |
631 | sigp=1.d0 | |
632 | else | |
633 | sigp=-1.d0 | |
634 | end if | |
635 | ||
636 | * calculate new 4-momentum of hard parton | |
637 | phirs=2.d0*pi*pyr(0) | |
638 | epan=max(epa-rsk*rsk/(2.d0*ep0)-abs(elr),1.d0) | |
639 | pptn=dsqrt(abs(rsk*rsk+(rsk**4)*(1.d0-epa*epa/(ppl*ppl))/ | |
640 | > (4.d0*ep0*ep0)-(rsk**4)*epa/(2.d0*ep0*ppl*ppl)-(rsk**4)/ | |
641 | > (4.d0*ppl*ppl))) | |
642 | ppln=dsqrt(abs(epan*epan-pptn*pptn-p(i,5)**2)) | |
643 | p(i,1)=pptn*dcos(phirs) ! px | |
644 | p(i,2)=pptn*dsin(phirs) ! py | |
645 | p(i,3)=sigp*ppln ! pz | |
646 | p(i,4)=epan ! E | |
647 | ||
648 | * boost to system of hard parton | |
649 | 222 call pyrobo(0,0,tetr,phir,0.d0,0.d0,0.d0) | |
650 | ||
651 | return | |
652 | end | |
653 | ******************************* END PLJETR ************************** | |
654 | ||
655 | ******************************** PLSEAR *************************** | |
656 | SUBROUTINE PLSEAR (fmax,xmin) | |
657 | * finding maximum and 'sufficient minimum of nucleus thikness function. | |
658 | * xm, fm are outputs. | |
659 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
660 | IMPLICIT INTEGER(I-N) | |
661 | INTEGER PYK,PYCHGE,PYCOMP | |
662 | external plthik | |
663 | common /parimp/ b1, psib1, rb1, rb2 | |
664 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
665 | ||
666 | rm1=dsqrt(abs(RA*RA-b1*b1/4.d0*(dsin(psib1)**2)))+ | |
667 | > b1*dcos(psib1)/2.d0 | |
668 | rm2=dsqrt(abs(RA*RA-b1*b1/4.d0*(dsin(psib1)**2)))- | |
669 | > b1*dcos(psib1)/2.d0 | |
670 | xmin=min(rm1,rm2) | |
671 | fmax=0.d0 | |
672 | do 10 j=1,1000 | |
673 | x=xmin*(j-1)/999.d0 | |
674 | f=plthik(x) | |
675 | if(f.gt.fmax) then | |
676 | fmax=f | |
677 | end if | |
678 | 10 continue | |
679 | ||
680 | return | |
681 | end | |
682 | ****************************** END PLSEAR ************************** | |
683 | ||
684 | ******************************** RADSEAR *************************** | |
685 | SUBROUTINE RADSEAR (fmax,xmin) | |
686 | * find maximum and 'sufficient minimum of radiative energy loss distribution | |
687 | * xm, fm are outputs. | |
688 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
689 | IMPLICIT INTEGER(I-N) | |
690 | INTEGER PYK,PYCHGE,PYCOMP | |
691 | external plfun1 | |
692 | common /radcal/ aa, bb | |
693 | ||
694 | xmin=bb-aa | |
695 | fmax=0.d0 | |
696 | do j=1,1000 | |
697 | x=aa+xmin*(j-1)/999.d0 | |
698 | f=plfun1(x) | |
699 | if(f.gt.fmax) then | |
700 | fmax=f | |
701 | end if | |
702 | end do | |
703 | ||
704 | return | |
705 | end | |
706 | ****************************** END RADSEAR ************************** | |
707 | ||
708 | ********************************* BIPSEAR *************************** | |
709 | SUBROUTINE BIPSEAR (fmax,xmin) | |
710 | * find maximum and 'sufficient minimum' of jet production cross section | |
711 | * as a function of impact paramater (xm, fm are outputs) | |
712 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
713 | IMPLICIT INTEGER(I-N) | |
714 | INTEGER PYK,PYCHGE,PYCOMP | |
715 | external funbip | |
716 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
717 | ||
718 | xmin=2.*RA | |
719 | fmax=0.d0 | |
720 | do j=1,1000 | |
721 | x=xmin*(j-1)/999.d0 | |
722 | f=funbip(x) | |
723 | if(f.gt.fmax) then | |
724 | fmax=f | |
725 | end if | |
726 | end do | |
727 | ||
728 | return | |
729 | end | |
730 | ****************************** END RADSEAR ************************** | |
731 | ||
732 | **************************** SIMPA ********************************** | |
733 | SUBROUTINE SIMPA (A1,B1,H1,REPS1,AEPS1,FUNCT,X, | |
734 | 1 AI,AIH,AIABS) | |
735 | * calculate intergal of function FUNCT(X) on the interval from A1 to B1 | |
736 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
737 | IMPLICIT INTEGER(I-N) | |
738 | DIMENSION F(7), P(5) | |
739 | H=dSIGN ( H1, B1-A1 ) | |
740 | S=dSIGN (1.d0, H ) | |
741 | A=A1 | |
742 | B=B1 | |
743 | AI=0.0d0 | |
744 | AIH=0.0d0 | |
745 | AIABS=0.0d0 | |
746 | P(2)=4.d0 | |
747 | P(4)=4.d0 | |
748 | P(3)=2.d0 | |
749 | P(5)=1.d0 | |
750 | IF(B-A)1,2,1 | |
751 | 1 REPS=ABS(REPS1) | |
752 | AEPS=ABS(AEPS1) | |
753 | DO 3 K=1,7 | |
754 | 3 F(K)=10.d16 | |
755 | X=A | |
756 | C=0.d0 | |
757 | F(1)=FUNCT(X)/3.d0 | |
758 | 4 X0=X | |
759 | IF( (X0+4.d0*H-B)*S)5,5,6 | |
760 | 6 H=(B-X0)/4.d0 | |
761 | IF ( H ) 7,2,7 | |
762 | 7 DO 8 K=2,7 | |
763 | 8 F(K)=10.d16 | |
764 | C=1.d0 | |
765 | 5 DI2=F (1) | |
766 | DI3=ABS( F(1) ) | |
767 | DO 9 K=2,5 | |
768 | X=X+H | |
769 | IF((X-B)*S)23,24,24 | |
770 | 24 X=B | |
771 | 23 IF(F(K)-10.d16)10,11,10 | |
772 | 11 F(K)=FUNCT(X)/3.d0 | |
773 | 10 DI2=DI2+P(K)*F(K) | |
774 | 9 DI3=DI3+P(K)*ABS(F(K)) | |
775 | DI1=(F(1)+4.*F(3)+F(5))*2.d0*H | |
776 | DI2=DI2*H | |
777 | DI3=DI3*H | |
778 | IF (REPS) 12,13,12 | |
779 | 13 IF (AEPS) 12,14,12 | |
780 | 12 EPS=ABS((AIABS+DI3)*REPS) | |
781 | IF(EPS-AEPS)15,16,16 | |
782 | 15 EPS=AEPS | |
783 | 16 DELTA=ABS(DI2-DI1) | |
784 | IF(DELTA-EPS)20,21,21 | |
785 | 20 IF(DELTA-EPS/8.d0)17,14,14 | |
786 | 17 H=2.d0*H | |
787 | F(1)=F(5) | |
788 | F(2)=F(6) | |
789 | F(3)=F(7) | |
790 | DO 19 K=4,7 | |
791 | 19 F(K)=10.d16 | |
792 | GO TO 18 | |
793 | 14 F(1)=F(5) | |
794 | F(3)=F(6) | |
795 | F(5)=F(7) | |
796 | F(2)=10.d16 | |
797 | F(4)=10.d16 | |
798 | F(6)=10.d16 | |
799 | F(7)=10.d16 | |
800 | 18 DI1=DI2+(DI2-DI1)/15.d0 | |
801 | AI=AI+DI1 | |
802 | AIH=AIH+DI2 | |
803 | AIABS=AIABS+DI3 | |
804 | GO TO 22 | |
805 | 21 H=H/2.d0 | |
806 | F(7)=F(5) | |
807 | F(6)=F(4) | |
808 | F(5)=F(3) | |
809 | F(3)=F(2) | |
810 | F(2)=10.d16 | |
811 | F(4)=10.d16 | |
812 | X=X0 | |
813 | C=0. | |
814 | GO TO 5 | |
815 | 22 IF(C)2,4,2 | |
816 | 2 RETURN | |
817 | END | |
818 | ************************* END SIMPA ******************************* | |
819 | ||
820 | ************************* PARINV ********************************** | |
821 | SUBROUTINE PARINV(X,A,F,N,R) | |
822 | * gives interpolation of function F(X) with arrays A(N) and F(N) | |
823 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
824 | IMPLICIT INTEGER(I-N) | |
825 | DIMENSION A(N),F(N) | |
826 | IF(X.LT.A(1))GO TO 11 | |
827 | IF(X.GT.A(N))GO TO 4 | |
828 | K1=1 | |
829 | K2=N | |
830 | 2 K3=K2-K1 | |
831 | IF(K3.LE.1)GO TO 6 | |
832 | K3=K1+K3/2 | |
833 | IF(A(K3)-X) 7,8,9 | |
834 | 7 K1=K3 | |
835 | GOTO2 | |
836 | 9 K2=K3 | |
837 | GOTO2 | |
838 | 8 P=F(K3) | |
839 | RETURN | |
840 | 3 B1=A(K1) | |
841 | B2=A(K1+1) | |
842 | B3=A(K1+2) | |
843 | B4=F(K1) | |
844 | B5=F(K1+1) | |
845 | B6=F(K1+2) | |
846 | R=B4*((X-B2)*(X-B3))/((B1-B2)*(B1-B3))+B5*((X-B1)*(X-B3))/ | |
847 | 1 ((B2-B1)*(B2-B3))+B6*((X-B1)*(X-B2))/((B3-B1)*(B3-B2)) | |
848 | RETURN | |
849 | 6 IF(K2.NE.N)GO TO 3 | |
850 | K1=N-2 | |
851 | GOTO3 | |
852 | 4 C=ABS(X-A(N)) | |
853 | IF(C.LT.0.1d-7) GO TO 5 | |
854 | K1=N-2 | |
855 | 13 CONTINUE | |
856 | C13 PRINT 41,X | |
857 | C41 FORMAT(25H X IS OUT OF THE INTERVAL,3H X=,F15.9) | |
858 | GO TO 3 | |
859 | 5 R=F(N) | |
860 | RETURN | |
861 | 11 C=ABS(X-A(1)) | |
862 | IF(C.LT.0.1d-7) GO TO 12 | |
863 | K1=1 | |
864 | GOTO 13 | |
865 | 12 R=F(1) | |
866 | RETURN | |
867 | END | |
868 | C************************** END PARINV ************************************* | |
869 | ||
870 | * function to calculate quark-quark scattering differential cross section | |
871 | double precision FUNCTION PLSIGH(Z) | |
872 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
873 | IMPLICIT INTEGER(I-N) | |
874 | INTEGER PYK,PYCHGE,PYCOMP | |
875 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
876 | pi=3.14159d0 | |
877 | beta=(33.d0-2.d0*nf)/(12.d0*pi) | |
878 | alfs=1.d0/(beta*dlog(max(1.d-10,z/(TC*TC)))) | |
879 | PLSIGH=8.d0*pi*alfs*alfs/(9.d0*z*z) | |
880 | return | |
881 | end | |
882 | ||
883 | * function to calculate differential radiated gluon spectrum in BDMS model | |
884 | double precision FUNCTION PLFUN1(or) | |
885 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
886 | IMPLICIT INTEGER(I-N) | |
887 | INTEGER PYK,PYCHGE,PYCOMP | |
888 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
889 | common /pljdat/ ej, z, ygl, alfs, um, epa | |
890 | common /pleave/ taul, temlev | |
891 | common /factor/ cfac, kf | |
892 | pi=3.14159d0 | |
893 | x=min((1.d0-ygl*z/or),or/ej) | |
894 | if(x.le.0.d0) x=0.d0 | |
895 | if(x.ge.1.d0) x=0.9999d0 | |
896 | if(kf.eq.21) then | |
897 | if(x.ge.0.5d0) x=1.-x | |
898 | spinf=0.5*(1.+(1.d0-x)**4+x**4)/(1.d0-x) | |
899 | else | |
900 | spinf=1.d0-x+0.5d0*x*x | |
901 | end if | |
902 | ak=ygl*z/(or*(1.d0-x)) | |
903 | al=taul*5.06d0 | |
904 | uu=0.5d0*al*dsqrt(abs(0.5d0*(1.d0-x+cfac*x*x)*ak* | |
905 | > dlog(max(16.d0/ak,1.d-10))))/ygl | |
906 | * if quark production outside the QGP then | |
907 | * arg=(((dsin(uu)*cosh(uu))**2)+((dcos(uu)*sinh(uu))**2))/(2.d0*uu*uu); | |
908 | * here quark production inside the QGP | |
909 | arg=((dcos(uu)*cosh(uu))**2)+((dsin(uu)*sinh(uu))**2) | |
910 | gl1=(ygl/(cfac*z))**0.3333333d0 | |
911 | gl2=(um/epa)**1.333333d0 | |
912 | dc=1.d0/((1.d0+((gl1*gl2*or)**1.5d0))**2) ! massive parton | |
913 | c dc=1.d0 !massless parton | |
914 | plfun1=dc*3.d0*alfs*ygl*dlog(max(arg,1.d-20))*spinf/(pi*al*or) | |
915 | return | |
916 | end | |
917 | ||
918 | * function to calculate time-dependence of QGP viscosity (if mvisc=1,2) | |
919 | double precision FUNCTION PLVISC(X) | |
920 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
921 | IMPLICIT INTEGER(I-N) | |
922 | INTEGER PYK,PYCHGE,PYCOMP | |
923 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
924 | pi=3.14159d0 | |
925 | T=X | |
926 | TC1=5.06d0*TC | |
927 | if(X.le.TC1) T=TC1 | |
928 | if(mvisc.eq.0) then | |
929 | c=0.d0 | |
930 | elseif(mvisc.eq.1) then | |
931 | a=3.4d0*(1.d0+0.12d0*(2.d0*nf+1.d0)) | |
932 | b=15.d0*(1.d0+0.06d0*nf) | |
933 | c=4.d0*pi*pi*(10.5d0*nf/a+16.d0/b)/675.d0 | |
934 | else | |
935 | c=(1.7d0*nf+1.d0)*0.342d0/(1.d0+nf/6.d0) | |
936 | end if | |
937 | bub=4.d0*T/TC1 | |
938 | alf=6.d0*pi/((33.d0-2.d0*nf)*dlog(max(bub,1.d-10))) | |
939 | alf1=1.d0/alf | |
940 | PLVISC=c*(T**3)/(alf*alf*dlog(max(1.d-10,alf1))) | |
941 | return | |
942 | end | |
943 | ||
944 | * function to calculate time-dependence of QGP number density | |
945 | double precision FUNCTION PLN(X) | |
946 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
947 | IMPLICIT INTEGER(I-N) | |
948 | INTEGER PYK,PYCHGE,PYCOMP | |
949 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
950 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
951 | common /plevol/ taup(5000),temp(5000),denp(5000),enep(5000) | |
952 | save /plevol/ | |
953 | pi2=3.14159d0*3.14159d0 | |
954 | t=X | |
955 | if(t.lt.taupl) then | |
956 | call parinv(t,taup,denp,5000,res) | |
957 | else | |
958 | res=1.2d0*(16.d0+9.d0*nf)*((5.06d0*TC)**3)/pi2 | |
959 | end if | |
960 | PLN=res | |
961 | return | |
962 | end | |
963 | ||
964 | * function to calculate time-dependence of QGP temperature | |
965 | double precision FUNCTION PLT(X) | |
966 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
967 | IMPLICIT INTEGER(I-N) | |
968 | INTEGER PYK,PYCHGE,PYCOMP | |
969 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
970 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
971 | common /plevol/ taup(5000),temp(5000),denp(5000),enep(5000) | |
972 | save /plevol/ | |
973 | t=X | |
974 | if(t.lt.taupl) then | |
975 | call parinv(t,taup,temp,5000,res) | |
976 | else | |
977 | res=TC | |
978 | end if | |
979 | PLT=res | |
980 | return | |
981 | end | |
982 | ||
983 | * function to caculate time-dependence of parton-plasma integral cross section | |
984 | double precision FUNCTION PLS(X) | |
985 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
986 | IMPLICIT INTEGER(I-N) | |
987 | INTEGER PYK,PYCHGE,PYCOMP | |
988 | external plsigh | |
989 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
990 | common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn | |
991 | common /plen/ epartc, um | |
992 | t=X | |
993 | pi=3.14159d0 | |
994 | bub=4.d0*t/TC | |
995 | alf=6.d0*pi/((33.d0-2.d0*nf)*dlog(max(bub,1.d-10))) | |
996 | ZZ0=4.d0*t*t*pi*alf*(1.d0+nf/6.d0) | |
997 | scm=4.d0*t*epartc+um*um+4.d0*t*t | |
998 | ZZ1=max((scm-((um+2.d0*t)**2))*(scm-((um-2.d0*t)**2))/scm,ZZ0) | |
999 | HH1=0.01d0*ZZ1 | |
1000 | REPS=0.01d0 | |
1001 | AEPS=1.d-8 | |
1002 | CALL SIMPA(ZZ0,ZZ1,HH1,REPS,AEPS,plsigh,ZZ,RESS,AIH,AIABS) | |
1003 | PLS=0.39d0*2.25d0*2.25d0*RESS*(16.d0+4.d0*nf)/(16.d0+9.d0*nf) | |
1004 | return | |
1005 | end | |
1006 | ||
1007 | * function to calculate nuclear thikness function | |
1008 | double precision FUNCTION PLTHIK(X) | |
1009 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
1010 | IMPLICIT INTEGER(I-N) | |
1011 | INTEGER PYK,PYCHGE,PYCOMP | |
1012 | common /parimp/ b1, psib1, rb1, rb2 | |
1013 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
1014 | bu=X | |
1015 | r12=bu*bu+b1*b1/4.d0+bu*b1*dcos(psib1) | |
1016 | r22=bu*bu+b1*b1/4.d0-bu*b1*dcos(psib1) | |
1017 | PLTHIK=dsqrt(abs((RA*RA-r12)*(RA*RA-r22)))*bu | |
1018 | return | |
1019 | end | |
1020 | ||
1021 | * function to generate gauss distribution | |
1022 | double precision function gauss(x0,sig) | |
1023 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
1024 | IMPLICIT INTEGER(I-N) | |
1025 | 41 u1=pyr(0) | |
1026 | u2=pyr(0) | |
1027 | v1=2.d0*u1-1.d0 | |
1028 | v2=2.d0*u2-1.d0 | |
1029 | s=v1**2+v2**2 | |
1030 | if(s.gt.1) go to 41 | |
1031 | gauss=v1*dsqrt(-2.d0*dlog(s)/s)*sig+x0 | |
1032 | return | |
1033 | end | |
1034 | ||
1035 | * function to calculate angular distribution of emitted gluons | |
1036 | double precision function gluang(x) | |
1037 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
1038 | IMPLICIT INTEGER(I-N) | |
1039 | s=0.0863d0 | |
1040 | gluang=x*dexp(-1.d0*(x-s)*(x-s)/(2.d0*s*s)) | |
1041 | return | |
1042 | end | |
1043 | ||
1044 | * function to calculate jet production vs. centrality | |
1045 | double precision function funbip(x) | |
1046 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
1047 | IMPLICIT INTEGER(I-N) | |
1048 | INTEGER PYK,PYCHGE,PYCOMP | |
1049 | common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf | |
1050 | dimension bip(15), bipr(15), pjet(15) | |
1051 | data bip/0.d0,0.5d0,1.5d0,2.5d0,3.5d0,4.5d0,5.5d0,6.5d0,7.5d0, | |
1052 | > 8.5d0,9.5d0,10.5d0,11.5d0,12.5d0,13.5d0/ | |
1053 | data pjet/200000.d0,217558.d0,625570.d0,949850.d0,1.17128d+06, | |
1054 | > 1.30123d+06,1.32297d+06,1.18483d+06,1.02584d+06,839982.d0, | |
1055 | > 621238.d0,399300.d0,227456.d0,113982.d0,41043.d0/ | |
1056 | bu=x | |
1057 | do i=1,15 | |
1058 | bipr(i)=bip(i)*RA/6.8d0 | |
1059 | end do | |
1060 | call parinv (bu,bipr,pjet,15,res) | |
1061 | funbip=res | |
1062 | return | |
1063 | end | |
1064 | ||
1065 | * function integrated at calculation of initial QGP temperature vs. centrality | |
1066 | double precision function ftaa(x) | |
1067 | IMPLICIT DOUBLE PRECISION(A-H, O-Z) | |
1068 | IMPLICIT INTEGER(I-N) | |
1069 | INTEGER PYK,PYCHGE,PYCOMP | |
1070 | common/bintaa/ br | |
1071 | a=1.d0+x*x | |
1072 | ftaa=(1.d0-br*x*x/a)*dlog(1.d0+x*x*(1.d0-br))/(a*a) | |
1073 | return | |
1074 | end | |
1075 | ************************************************************************** |