File indexing completed on 2024-04-06 12:14:11
0001
0002
0003
0004
0005
0006 subroutine IniSibyll
0007
0008
0009
0010 include 'epos.inc'
0011 COMMON /S_DEBUG/ Ncall, Ndebug
0012 COMMON /S_CSYDEC/ CBR(102), KDEC(612), LBARP(49), IDB(49)
0013
0014 call utpri('inisib',ish,ishini,6)
0015 write(ifmt,'(a,i6)')'initialize Sibyll ...'
0016
0017 Ndebug=0
0018 if(ish.ge.3)Ndebug=ish-2
0019
0020
0021 CALL SIBYLL_INI
0022
0023
0024 CALL NUC_NUC_INI
0025
0026
0027 do i=1,49
0028 IDB(i) = abs(IDB(i)) ! >0 means unstable
0029 enddo
0030
0031
0032 egymin=10.1
0033 egymax=1e7
0034 irescl=0
0035
0036
0037 call utprix('inisib',ish,ishini,6)
0038 end
0039
0040
0041 subroutine IniEvtSib
0042
0043
0044
0045 include 'epos.inc'
0046 COMMON /S_CSYDEC/ CBR(102), KDEC(612), LBARP(49), IDB(49)
0047 common/geom/rmproj,rmtarg,bmax,bkmx
0048
0049
0050 if(matarg.gt.18.or.maproj.gt.64)
0051 & call utstop('Mass too big for Sibyll (Mtrg<18, Mprj<64) !&')
0052 id=idtrafo('nxs','sib',idproj)
0053 ida=abs(id)
0054 if(ida.lt.6.or.ida.gt.14)
0055 & call utstop('projectile no allowed in Sibyll !&')
0056 if(idtarg.ne.0.and.idtarg.ne.1120)
0057 & call utstop('target no allowed in Sibyll !&')
0058 if(bminim.gt.0.or.bmaxim.lt.1000)
0059 & write(ifmt,*)'Only min bias event in Sibyll ... no b !'
0060 call iclass(idproj,iclpro)
0061 bminim=0.
0062 bmaxim=10000.
0063 bmax=10.+maproj+matarg
0064 sibincs=fsibcrse(engy,maproj,matarg)
0065 if(engy.lt.egymin)sibincs=0. !below egymin, no interaction
0066 call xsigma
0067
0068
0069
0070
0071
0072 if(idecay.eq.1.and.ctaumin.le.0.)then
0073
0074 if(ndecay.eq.1.or.mod(ndecay/10,10).eq.1)then !Kshort, Klong
0075 IDB(11) = -abs(IDB(11)) ! <0 means stable
0076 IDB(12) = -abs(IDB(12))
0077 endif
0078 if(ndecay.eq.1.or.mod(ndecay/100,10).eq.1)then !Lambda
0079 IDB(39) = -abs(IDB(39))
0080 endif
0081 if(ndecay.eq.1.or.mod(ndecay/1000,10).eq.1)then !sigma+
0082 IDB(34) = -abs(IDB(34))
0083 endif
0084 if(ndecay.eq.1.or.mod(ndecay/1000,10).eq.1)then !sigma-
0085 IDB(36) = -abs(IDB(36))
0086 endif
0087 if(ndecay.eq.1.or.mod(ndecay/10000,10).eq.1)then !Xi+/-
0088 IDB(38) = -abs(IDB(38))
0089 endif
0090 if(ndecay.eq.1.or.mod(ndecay/10000,10).eq.1)then !Xi0
0091 IDB(37) = -abs(IDB(37))
0092 endif
0093 if(ndecay.eq.1.or.mod(ndecay/100000 ,10).eq.1)then !omega
0094 IDB(49) = -abs(IDB(49))
0095 endif
0096 if(ndecay.eq.1.or.mod(ndecay/1000000,10).eq.1)then !pi0
0097 IDB(6) = -abs(IDB(6))
0098 endif
0099
0100 if(nrnody.gt.0)then !all other particle
0101 do nod=1,nrnody
0102 idd=abs(idtrafo('nxs','sib',nody(nod)))
0103 if(idd.lt.50)IDB(idd) = -abs(IDB(idd))
0104 enddo
0105 endif
0106
0107 else
0108
0109
0110 do i=1,49
0111 IDB(i) = -abs(IDB(i)) ! <0 means stable
0112 enddo
0113
0114 endif
0115
0116 if(ish.ge.2)write(ifch,*)
0117 & 'Sibyll used with (E,proj,maproj,matarg)',engy,id,maproj
0118 & ,matarg
0119
0120 return
0121 end
0122
0123
0124 subroutine emssib(iret)
0125
0126
0127
0128 include 'epos.inc'
0129 common/geom/rmproj,rmtarg,bmax,bkmx
0130
0131 COMMON /S_PLIST/ P(8000,5), LLIST(8000), NP
0132 COMMON /S_PLNUC/ PA(5,40000), LLA(40000), NPA
0133 PARAMETER (NW_max = 20)
0134 PARAMETER (NS_max = 20, NH_max = 50)
0135 PARAMETER (NJ_max = (NS_max+NH_max)*NW_max)
0136 COMMON /S_CHIST/ X1J(NJ_max),X2J(NJ_max),
0137 & X1JSUM(NW_max),X2JSUM(NW_max),PTJET(NJ_max),PHIJET(NJ_max),
0138 & NNPJET(NJ_max),NNPSTR(2*NW_max),NNSOF(NW_max),NNJET(NW_max),
0139 & JDIF(NW_max),NW,NJET,NSOF
0140
0141 iret=0
0142 b1=bminim
0143 b2=min(bmax,bmaxim)
0144 a=pi*(b2**2-b1**2)
0145
0146 if(a.gt.0..and.rangen().gt.sibincs/10./a)goto 1001 !no interaction
0147 if(ish.ge.3)call alist('Determine Sibyll Production&',0,0)
0148
0149 nptl=0
0150 NP=0
0151 NPA=0
0152
0153 nevt=1
0154 kolevt=-1
0155 koievt=-1
0156 kohevt=-1
0157 npjevt=maproj
0158 ntgevt=matarg
0159 pmxevt=pnll
0160 egyevt=engy
0161 bimevt=0.
0162 bimp=0.
0163 phievt=0.
0164 phi=0.
0165 anintine=anintine+1.
0166 ns=0 !number of projectile spectators
0167 npps=0
0168 npns=0
0169
0170 call conre
0171 call conwr
0172
0173 itrg=matarg
0174 if(idtargin.eq.0)itrg=0
0175 if(maproj.eq.1)then !hadronic projectile
0176 L0=idtrafo('nxs','sib',idproj)
0177 CALL SIBYLL (L0, itrg, engy)
0178 CALL DECSIB
0179 if(ish.ge.5)write(ifch,'(a,i5)')
0180 $ ' number of particles from Sibyll :',NP
0181
0182 if(JDIF(1).eq.0)then
0183 typevt=1 !ND
0184 elseif(JDIF(1).eq.3)then
0185 typevt=2 !DD
0186 else
0187 typevt=4 !SD
0188 endif
0189 do k=1,NP
0190
0191
0192 ic=LLIST(k)
0193
0194 if(ish.ge.7)write(ifch,'(a,i5,a,i5,2a,4(e10.4,1x))')
0195 $ ' Sibyll particle ',k,' id :',ic,' before conversion'
0196 $ , ' momentum :',(P(k,i),i=1,5)
0197
0198 nptl=nptl+1
0199 if(nptl.gt.mxptl)call utstop('Sibyll: mxptl too small&')
0200
0201 if(abs(ic).ge.10000)then
0202 ic=ic-sign(10000,ic)
0203 istptl(nptl)=1
0204 else
0205 istptl(nptl)=0
0206 endif
0207
0208 id=idtrafo('sib','nxs',ic)
0209 if(ish.ge.7)write(ifch,'(a,i5,a,i5,a)')
0210 $ ' epos particle ',nptl,' id :',id,' after conversion'
0211
0212
0213 pptl(1,nptl)=P(k,1) !P_x
0214 pptl(2,nptl)=P(k,2) !P_y
0215 pptl(3,nptl)=P(k,3) !P_z
0216 pptl(4,nptl)=abs(P(k,4)) !E
0217 pptl(5,nptl)=P(k,5) !mass
0218 ityptl(nptl)=0
0219 iorptl(nptl)=1
0220 jorptl(nptl)=maproj+matarg
0221 ifrptl(1,nptl)=0
0222 ifrptl(2,nptl)=0
0223 xorptl(1,nptl)=0.
0224 xorptl(2,nptl)=0.
0225 xorptl(3,nptl)=0.
0226 xorptl(4,nptl)=0.
0227 tivptl(1,nptl)=0.
0228 tivptl(2,nptl)=0.
0229 idptl(nptl)=id
0230
0231
0232 if(ish.ge.5)write(ifch,'(a,i5,a,i5,a,4(e10.4,1x),f6.3)')
0233 $ ' particle from Sibyll ',nptl,' id :',idptl(nptl)
0234 $ , ' momentum :',(pptl(i,nptl),i=1,5)
0235
0236
0237 enddo
0238 if(NW.lt.matarg)then
0239 ntgevt=NW
0240 do is=maproj+1+NW,maproj+matarg !make the ns last target nucleon final
0241 iorptl(is)=0
0242 istptl(is)=0
0243 enddo
0244 endif
0245 else !for nucleus projectile
0246 nbar=0
0247 IAP = maproj
0248 CALL SIBNUC (IAP, itrg, engy)
0249 if(ish.ge.5)write(ifch,'(a,i5)')
0250 $ ' number of particles from Sibyll :',NPA
0251 do 100 k=1,NPA
0252
0253
0254 ic=LLA(k)
0255
0256 if(ish.ge.7)write(ifch,'(a,i5,a,i5,2a,4(e10.4,1x))')
0257 $ ' Sibyll particle ',k,' id :',ic,' before conversion'
0258 $ , ' momentum :',(PA(i,k),i=1,5)
0259
0260
0261 nNuc=0
0262 if(ic.ge.1001) then !count spectators
0263 nNuc=ic-1000
0264 if(infragm.le.1
0265 & .or.PA(4,k).lt.0.5*egymin)then !nuclear interaction only above min energy, otherwise : fragmentation
0266 ns=ns+nNuc
0267 goto 100
0268 elseif(ic.eq.1001)then
0269 if(drangen(dummy).lt.0.45d0) then
0270 ic = 13
0271 npps=npps+1
0272 else
0273 ic = 14
0274 npns=npns+1
0275 endif
0276 nNuc=0
0277 else
0278 ptm=sqrt(PA(1,k)*PA(1,k)+PA(2,k)*PA(2,k)+PA(5,k)*PA(5,k))
0279 PA(4,k)=PA(4,k)*float(nNuc) !energy by nucleon
0280 PA(3,k)=sign(sqrt((PA(4,k)+ptm)*(PA(4,k)-ptm)),PA(3,k))
0281 npps=npps+nNuc/2
0282 npns=npns+nNuc-nNuc/2
0283 endif
0284 endif
0285 nptl=nptl+1
0286 if(nptl.gt.mxptl)call utstop('Sibyll: mxptl too small&')
0287 id=idtrafo('sib','nxs',ic)
0288 if(ish.ge.7)write(ifch,'(a,i5,a,i10,a)')
0289 $ ' epos particle ',nptl,' id :',id,' after conversion'
0290
0291
0292 nbar=nbar+nNuc
0293 if(abs(id).gt.1000.and.nNuc.eq.0)nbar=nbar+sign(1,id)
0294 pptl(1,nptl)=PA(1,k) !P_x
0295 pptl(2,nptl)=PA(2,k) !P_y
0296 pptl(3,nptl)=PA(3,k) !P_z
0297 pptl(4,nptl)=PA(4,k) !E
0298 pptl(5,nptl)=PA(5,k) !mass
0299 istptl(nptl)=0
0300 ityptl(nptl)=0
0301 iorptl(nptl)=1
0302 jorptl(nptl)=maproj+matarg
0303 ifrptl(1,nptl)=0
0304 ifrptl(2,nptl)=0
0305 xorptl(1,nptl)=0.
0306 xorptl(2,nptl)=0.
0307 xorptl(3,nptl)=0.
0308 xorptl(4,nptl)=0.
0309 tivptl(1,nptl)=0.
0310 tivptl(2,nptl)=0.
0311 idptl(nptl)=id
0312
0313
0314 if(ish.ge.5)write(ifch,'(a,i5,a,i10,a,4(e10.4,1x),f6.3)')
0315 $ ' particle from Sibyll ',nptl,' id :',idptl(nptl)
0316 $ , ' momentum :',(pptl(i,nptl),i=1,5)
0317
0318 100 continue
0319
0320 ntw=nbar-(maproj-ns)
0321 nsf=0
0322 if(ntw.lt.matarg)then
0323 ntgevt=ntw
0324 do is=maproj+1+ntw,maproj+matarg !make the nts last target nucleon final (not wounded)
0325 iorptl(is)=0
0326 istptl(is)=0
0327 enddo
0328 else
0329 nsf=maproj+matarg-nbar
0330 endif
0331 if(ish.ge.5)write(ifch,'(a,i3,a,i3,a,i2,a)')
0332 $ ' target spectators :',matarg-ntw
0333 $ ,' projectile spectators (ns) :',nsf,' (',ns,')'
0334 if((infragm.le.1.or.ns.gt.0).and.nsf.le.maproj)then
0335 if(infragm.eq.2)ns=ns-nsf
0336 if(infragm.eq.1.and.ns.gt.0)then
0337
0338 nptl=nptl+1
0339 istptl(nptl)=0
0340 pptl(1,nptl)=0.d0
0341 pptl(2,nptl)=0.d0
0342 pptl(4,nptl)=0.d0
0343 inucl=0
0344 do is=1,ns
0345 inucl=inucl+1
0346 pptl(4,nptl)=pptl(4,nptl)+pptl(4,is)
0347 enddo
0348 iprot= int(dble(inucl) / 2.15d0 + 0.7d0)
0349 idnucl=1000000000+iprot*10000+inucl*10 !code for nuclei
0350 npps=npps+iprot
0351 npns=npns+inucl-iprot
0352 call idmass(idnucl,am)
0353 pptl(5,nptl)=am !mass
0354 ptot=(pptl(4,nptl)+am)*(pptl(4,nptl)-am)
0355 pptl(3,nptl)=sqrt(ptot)
0356 ityptl(nptl)=0
0357 istptl(nptl)=0
0358 iorptl(nptl)=1
0359 jorptl(nptl)=maproj
0360 ifrptl(1,nptl)=0
0361 ifrptl(2,nptl)=0
0362 xorptl(1,nptl)=xorptl(1,1)
0363 xorptl(2,nptl)=xorptl(2,1)
0364 xorptl(3,nptl)=xorptl(3,1)
0365 xorptl(4,nptl)=xorptl(4,1)
0366 tivptl(1,nptl)=tivptl(1,1)
0367 tivptl(2,nptl)=tivptl(2,1)
0368 idptl(nptl)=idnucl
0369 else
0370 do is=maproj-ns+1,maproj !make the nsf first projectile nucleon final (not wounded)
0371 if(infragm.eq.2)istptl(is)=0
0372 if(idptl(is).eq.1120)npps=npps+1
0373 if(idptl(is).eq.1220)npns=npns+1
0374 enddo
0375 endif
0376 endif
0377
0378 if(laproj.gt.1)then
0379 npjevt=maproj-npps-npns
0380 npppar=max(0,laproj-npps)
0381 npnpar=npjevt-npppar
0382
0383 do i=1,maproj
0384 if(idptl(i).eq.1120)then
0385 if(npppar.gt.0)then
0386 npppar=npppar-1
0387 else !restore spectators
0388 iorptl(i)=0
0389 if(infragm.eq.0)istptl(i)=0
0390 endif
0391 endif
0392 if(idptl(i).eq.1220)then
0393 if(npnpar.gt.0)then
0394 npnpar=npnpar-1
0395 else !restore spectators
0396 iorptl(i)=0
0397 if(infragm.eq.0)istptl(i)=0
0398 endif
0399 endif
0400 enddo
0401 endif
0402
0403 endif
0404
0405
0406 1000 return
0407
0408 1001 iret=-1
0409 goto 1000
0410
0411 end
0412
0413
0414
0415 function fsibcrse(egy,mapro,matar)
0416
0417
0418
0419
0420 include 'epos.inc'
0421 dimension SDIF(3)
0422
0423 if(iclpro.eq.1)then
0424 L=2
0425 elseif(iclpro.eq.2)then
0426 L=1
0427 else
0428 L=3
0429 endif
0430 call SIB_SIGMA_HP(L,egy,ST,SEL,SINEL,SDIF,SL,RHO)
0431 if(matar.gt.1)then
0432
0433 CALL GLAUBER(matar,ST,SL,RHO,SIGTA,SIGELAdum,SIGQEA)
0434 fsibcrse=SIGTA-SIGQEA
0435 else
0436 fsibcrse=SINEL
0437 endif
0438
0439 if(mapro.gt.1)fsibcrse=ainfin !???????? temporary
0440
0441 return
0442 end
0443
0444
0445 double precision function sibcrse(ek,mapro,matar,id)
0446
0447
0448
0449
0450
0451
0452
0453
0454 include 'epos.inc'
0455 double precision egy
0456 COMMON /CLENNN/ SSIGNUC(60), ALNUC(60)
0457
0458 sibcrse=0.d0
0459 call idmass(1120,amt1)
0460 call idmass(1220,amt2)
0461 amtar=0.5*(amt1+amt2)
0462 if(mapro.eq.1)call idmass(idproj,ampro)
0463 if(matar.eq.1)call idmass(idtarg,amtar)
0464 egy=dble(ek+ampro)
0465 if(id.eq.0)then
0466 if(maproj.eq.1)then
0467 sqs=sqrt( 2*real(egy)*amtar+amtar**2+ampro**2 )
0468 if(iclpro.eq.1)then
0469 L=2
0470 elseif(iclpro.eq.2)then
0471 L=1
0472 else
0473 L=3
0474 endif
0475 call SIB_SIGMA_HAIR (L,sqs,sibcr)
0476 sibcrse=dble(sibcr)
0477 else
0478 EO=real(egy)*1.e-3 !e0 in TeV
0479 CALL SIGNUC_INI(mapro,E0) ! fills SSIGNUC and ALNUC
0480 sibcrse = dble(SSIGNUC(mapro))
0481 endif
0482 else
0483 sqs=sqrt( 2*real(egy)*amtar+amtar**2+ampro**2 )
0484 sibcrse=dble(fsibcrse(sqs,mapro,matar))
0485 endif
0486
0487 return
0488 end
0489
0490
0491 function S_RNDM(idum)
0492
0493
0494
0495 include 'epos.inc'
0496
0497 S_RNDM=rangen()
0498 if(irandm.eq.1)write(ifch,*)'S_RNDM()= ',S_RNDM,idum
0499
0500 return
0501 end
0502
0503
0504