eventgen.f 92.26 KiB
c*****************************************************************************
c**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!***
c**!! IF YOU USE THIS PROGRAM, PLEASE CITE: !!***
c**!! A.M"ucke, Ralph Engel, J.P.Rachen, R.J.Protheroe and Todor Stanev, !!***
c**!! 1999, astro-ph/9903478, to appear in Comp.Phys.Commun. !!***
c**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!***
c*****************************************************************************
c** Further SOPHIA related papers: ***
c** (1) M"ucke A., et al 1999, astro-ph/9808279, to appear in PASA. ***
c** (2) M"ucke A., et al 1999, to appear in: Proc. of the ***
c** 19th Texas Symposium on Relativistic Astrophysics, Paris, France, ***
c** Dec. 1998. Eds.: J.~Paul, T.~Montmerle \& E.~Aubourg (CEA Saclay) ***
c** (3) M"ucke A., et al 1999, astro-ph/9905153, to appear in: Proc. of ***
c** 19th Texas Symposium on Relativistic Astrophysics, Paris, France, ***
c** Dec. 1998. Eds.: J.~Paul, T.~Montmerle \& E.~Aubourg (CEA Saclay) ***
c** (4) M"ucke A., et al 1999, to appear in: Proc. of 26th Int.Cosmic Ray ***
c** Conf. (Salt Lake City, Utah) ***
c*****************************************************************************
subroutine eventgen(L0,E0,eps,theta,Imode)
c*******************************************************
c** subroutine for photopion production of **
c** relativistic nucleons in a soft photon field **
c** subroutine for SOPHIA Version 1.2 **
c****** INPUT ******************************************
c E0 = energy of incident proton (in lab frame) [in GeV]
c eps = energy of incident photon [in GeV] (in lab frame)
c theta = angle between incident proton and photon [in degrees]
c L0 = code number of the incident nucleon
c****** OUTPUT *************************************************
c P(2000,5) = 5-momentum of produced particles
c LLIST(2000) = code numbers of produced particles
c NP = number of produced particles
c***************************************************************
c** Date: 20/01/98 **
c** correct.:19/02/98 **
c** change: 23/05/98 **
c** last change:06/09/98 **
c** authors: A.Muecke **
c** R.Engel **
c**************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
COMMON /SO_RUN/ SQS, S, Q2MIN, XMIN, ZMIN, kb, kt, a1, a2, Nproc
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /SO_CHP/ S_LIFE(49), ICHP(49), ISTR(49), IBAR(49)
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
CHARACTER NAMPRES*6
COMMON /RES_PROP/ AMRES(9), SIG0(9),WIDTH(9),
+ NAMPRES(0:9)
CHARACTER NAMPRESp*6
COMMON /RES_PROPp/ AMRESp(9), BGAMMAp(9),WIDTHp(9),
+ RATIOJp(9),NAMPRESp(0:9)
CHARACTER NAMPRESn*6
COMMON /RES_PROPn/ AMRESn(9), BGAMMAn(9),WIDTHn(9),
+ RATIOJn(9),NAMPRESn(0:9)
INTEGER KSEQ
PARAMETER (KSEQ = 8)
DOUBLE PRECISION C(KSEQ),U(97,KSEQ),UNI
INTEGER IJKL(KSEQ),I97(KSEQ),J97(KSEQ),
* NTOT(KSEQ),NTOT2(KSEQ),JSEQ
COMMON /CRRANMA4/C,U,IJKL,I97,J97,NTOT,NTOT2,JSEQ
DOUBLE PRECISION P_nuc(4),P_gam(4),P_sum(4),PC(4),GamBet(4)
DATA pi /3.141593D0/
DATA IRESMAX /9/
DATA Icount / 0 /
c****** INPUT **************************************************
c E0 = energy of incident proton (in lab frame) [in GeV]
c eps = energy of incident photon [in GeV] (in lab frame)
c theta = angle between incident proton and photon [in degrees]
c L0 = code number of the incident nucleon
c***************************************************************
c** calculate eps_prime = photon energy in nuclear rest frame,
c** sqrt(s) = CMF energy of the N\gamma-system
c... declare stable particles:
C muons stable
c IDB(4) = -ABS(IDB(4))
c IDB(5) = -ABS(IDB(5))
C
C pi+,pi0,pi- stable
c IDB(6) = -ABS(IDB(6))
c IDB(7) = -ABS(IDB(7))
c IDB(8) = -ABS(IDB(8))
C
C Deltas stable
C IDB(40) = -ABS(IDB(40))
C IDB(41) = -ABS(IDB(41))
C IDB(42) = -ABS(IDB(42))
C IDB(43) = -ABS(IDB(43))
C rho, omega, phi stable
C IDB(25) = -ABS(IDB(25))
C IDB(26) = -ABS(IDB(26))
C IDB(27) = -ABS(IDB(27))
C IDB(32) = -ABS(IDB(32))
C IDB(33) = -ABS(IDB(33))
C print *,' WARNING: Deltas, eta, VMs are stable in this version'
C rho0,omega stable
c IDB(27) = -ABS(IDB(27))
c IDB(32) = -ABS(IDB(32))
C STRANGE PARTICLES:
C kaons stable
c IDB(9) = -ABS(IDB(9))
c IDB(10) = -ABS(IDB(10))
C IDB(11) = -ABS(IDB(11))
C IDB(12) = -ABS(IDB(12))
C IDB(21) = -ABS(IDB(21))
C IDB(22) = -ABS(IDB(22))
C kaons* stable
c IDB(28) = -ABS(IDB(28))
c IDB(29) = -ABS(IDB(29))
c IDB(30) = -ABS(IDB(30))
c IDB(31) = -ABS(IDB(31))
C eta stable
C IDB(23) = -ABS(IDB(23))
C**anfe 2016/01/20 Initialize the non-default RMMARD
C** random number generator with default
C** seed, if necessary
if (.not.(U(1,1).gt.0D0)) Call INIT_RMMARD(12345)
C incoming nucleon
pm = AM(L0)
P_nuc(1) = 0.D0
P_nuc(2) = 0.D0
P_nuc(3) = SQRT(MAX((E0-pm)*(E0+pm),0.D0))
P_nuc(4) = E0
C incoming photon
P_gam(1) = EPS*SIN(theta*pi/180.D0)
P_gam(2) = 0.D0
P_gam(3) = -EPS*COS(theta*pi/180.D0)
P_gam(4) = EPS
Esum = P_nuc(4)+P_gam(4)
PXsum = P_nuc(1)+P_gam(1)
PYsum = P_nuc(2)+P_gam(2)
PZsum = P_nuc(3)+P_gam(3)
IQchr = ICHP(1)+ICHP(L0)
IQbar = IBAR(1)+IBAR(L0)
gammap = E0/pm
xx = 1.D0/gammap
if(gammap.gt.1000.D0) then
betap = 1.D0 - 0.5D0*xx**2 - 0.125D0*xx**4
else
betap = sqrt(1.D0-xx)*sqrt(1.D0+xx)
endif
c Etot = E0+eps
s = pm*pm + 2.D0*eps*E0*(1.D0-betap*cos(theta*pi/180.D0))
sqsm = sqrt(s)
eps_prime = (s-pm*pm)/2.D0/pm
C calculate Lorentz boots and rotation
P_sum(1) = P_nuc(1)+P_gam(1)
P_sum(2) = P_nuc(2)+P_gam(2)
P_sum(3) = P_nuc(3)+P_gam(3)
P_sum(4) = P_nuc(4)+P_gam(4)
C Lorentz transformation into c.m. system
DO I=1,4
GamBet(I) = P_sum(I)/sqsm
ENDDO
C calculate rotation angles
IF(GamBet(4).lt.1.d5) then
C transform nucleon vector
GamBet(1) = -GamBet(1)
GamBet(2) = -GamBet(2)
GamBet(3) = -GamBet(3)
CALL PO_ALTRA(GamBet(4),GamBet(1),GamBet(2),GamBet(3),
& P_nuc(1),P_nuc(2),P_nuc(3),P_nuc(4),Ptot,
& PC(1),PC(2),PC(3),PC(4))
GamBet(1) = -GamBet(1)
GamBet(2) = -GamBet(2)
GamBet(3) = -GamBet(3)
C rotation angle: nucleon moves along +z
COD = PC(3)/Ptot
SID = SQRT(PC(1)**2+PC(2)**2)/Ptot
COF = 1.D0
SIF = 0.D0
IF(Ptot*SID.GT.1.D-5) THEN
COF=PC(1)/(SID*Ptot)
SIF=PC(2)/(SID*Ptot)
Anorf=SQRT(COF*COF+SIF*SIF)
COF=COF/Anorf
SIF=SIF/Anorf
ENDIF
else
COD = 1.D0
SID = 0.D0
COF = 1.D0
SIF = 0.D0
endif
c... check for threshold:
sth = 1.1646D0
if (s.lt.sth) then
print*,'input energy below threshold for photopion production !'
print*,'sqrt(s) = ',sqrt(s)
NP = 0
RETURN
endif
200 continue
Icount = Icount+1
Imode = 0
c*******************************************************************
c decide which process occurs: ***
c (1) decay of resonance ***
c (2) direct pion production (interaction of photon with ***
c virtual pions in nucleon cloud) and diffractive scattering ***
c (3) multipion production ***
c*******************************************************************
call dec_inter3(eps_prime,Imode,L0)
c*********************************************
c******* PARTICLE PRODUCTION *****************
c*********************************************
c 42 continue
if (Imode.le.5) then
c... direct/multipion/diffractive scattering production channel:
call GAMMA_H(sqsm,L0,Imode,Ifbad)
if(Ifbad.ne.0) then
print *,' eventgen: simulation of particle production failed'
goto 200
endif
else if (Imode.eq.6) then
c... Resonances:
c... decide which resonance decays with ID=IRES in list:
c... IRESMAX = number of considered resonances = 9 so far
IRES = 0
46 call dec_res2(eps_prime,IRES,IRESMAX,L0)
Nproc = 10+IRES
call dec_proc2(eps_prime,IPROC,IRANGE,IRES,L0)
c 2-particle decay of resonance in CM system:
NP = 2
call res_decay3(IRES,IPROC,IRANGE,s,L0,nbad)
if (nbad.eq.1) then
print *,' eventgen: event rejected by res_decay3'
goto 46
endif
call DECSOP
else
print*,'invalid Imode !!'
STOP
endif
c... consider only stable particles:
18 istable=0
do 16 i=1,NP
if (abs(LLIST(i)).lt.10000) then
istable = istable+1
LLIST(istable) = LLIST(i)
P(istable,1) = P(i,1)
P(istable,2) = P(i,2)
P(istable,3) = P(i,3)
P(istable,4) = P(i,4)
P(istable,5) = P(i,5)
endif
16 continue
if (NP.gt.istable) then
do i=istable+1,NP
LLIST(i) = 0
P(i,1) = 0.
P(i,2) = 0.
P(i,3) = 0.
P(i,4) = 0.
P(i,5) = 0.
enddo
endif
NP = istable
c***********************************************
c transformation from CM-system to lab-system: *
c***********************************************
DO I=1,NP
CALL PO_TRANS(P(I,1),P(I,2),P(I,3),COD,SID,COF,SIF,
& PC(1),PC(2),PC(3))
PC(4) = P(I,4)
CALL PO_ALTRA(GamBet(4),GamBet(1),GamBet(2),GamBet(3),
& PC(1),PC(2),PC(3),PC(4),Ptot,
& P(I,1),P(I,2),P(I,3),P(I,4))
ENDDO
c call check_event(Icount,Esum,PXsum,PYsum,PZsum,IQchr,IQbar,Irej)
c if(Irej.ne.0) then
c print *,' eventgen: event rejected by check_event'
c goto 200
c endif
return
END
c*****************************
c*** List of SUBROUTINES *****
C*****************************
DOUBLE PRECISION function crossection(x,NDIR,NL0)
IMPLICIT DOUBLE PRECISION (A-M,O-Z)
IMPLICIT INTEGER (N)
SAVE
CHARACTER NAMPRES*6
COMMON /RES_PROP/ AMRES(9), SIG0(9),WIDTH(9),
+ NAMPRES(0:9)
COMMON /SO_MASS1/ AM(49), AM2(49)
DIMENSION sig_res(9)
external breitwigner, Ef, singleback, twoback
DATA sth /1.1646D0/
c*****************************************************
C calculates crossection of N-gamma-interaction
C (see thesis of J.Rachen, p.45ff and corrections
C report from 27/04/98, 5/05/98, 22/05/98 of J.Rachen)
C*****************************************************
c** Date: 20/01/98 **
c** correct.:27/04/98**
c** update: 23/05/98 **
c** author: A.Muecke **
c**********************
c
c x = eps_prime in GeV
pm = AM(NL0)
s = pm*pm+2.D0*pm*x
if (s.lt.sth) then
crossection = 0.
RETURN
endif
if (x.gt.10.D0) then
c only multipion production:
cross_res = 0.D0
cross_dir = 0.D0
cross_dir1 = 0.D0
cross_dir2 = 0.D0
goto 10
endif
c****************************
c RESONANCES:
c****************************
cross_res = 0.D0
cross_res = breitwigner(SIG0(1),WIDTH(1),AMRES(1),x)
& *Ef(x,0.152D0,0.17D0)
sig_res(1) = cross_res
DO N=2,9
sig_res(N) = breitwigner(SIG0(N),WIDTH(N),AMRES(N),x)
& *Ef(x,0.15D0,0.38D0)
cross_res = cross_res + sig_res(N)
ENDDO
c****************************
c DIRECT CHANNEL:
c****************************
if((x.gt.0.1D0).and.(x.lt.0.6D0)) then
cross_dir1 = singleback(x)
& + 40.D0*exp(-(x-0.29D0)**2/0.002D0)
& - 15.D0*exp(-(x-0.37D0)**2/0.002D0)
else
cross_dir1 = singleback(x)
endif
cross_dir2 = twoback(x)
cross_dir = cross_dir1 + cross_dir2
c****************************
c FRAGMENTATION 2:
c****************************
10 continue
if (NL0.eq.13) then
cross_frag2 = 80.3D0*Ef(x,0.5D0,0.1D0)*(s**(-0.34D0))
else if (NL0.eq.14) then
cross_frag2 = 60.2D0*Ef(x,0.5D0,0.1D0)*(s**(-0.34D0))
endif
c****************************************************
c MULTIPION PRODUCTION/FRAGMENTATION 1 CROSS SECTION
c****************************************************
if (x.gt.0.85D0) then
ss1 = (x-.85D0)/.69D0
if (NL0.eq.13) then
ss2 = 29.3D0*(s**(-.34D0))+59.3D0*(s**.095D0)
else if (NL0.eq.14) then
ss2 = 26.4D0*(s**(-.34D0))+59.3D0*(s**.095D0)
endif
cs_multidiff = (1.-exp(-ss1))*ss2
cs_multi = 0.89D0*cs_multidiff
c****************************
c DIFFRACTIVE SCATTERING:
c****************************
cross_diffr1 = .099D0*cs_multidiff
cross_diffr2 = .011D0*cs_multidiff
cross_diffr = 0.11D0*cs_multidiff
C***********************************************************************
ss1 = ((x-.85D0)**.75D0)/.64D0
ss2 = 74.1D0*(x**(-.44D0))+62.D0*(s**.08D0)
cs_tmp = 0.96D0*(1.D0-exp(-ss1))*ss2
cross_diffr1 = 0.14D0*cs_tmp
cross_diffr2 = 0.013D0*cs_tmp
cs_delta = cross_frag2 - (cross_diffr1+cross_diffr2-cross_diffr)
if(cs_delta.lt.0.D0) then
cross_frag2 = 0.D0
cs_multi = cs_multi+cs_delta
else
cross_frag2 = cs_delta
endif
cross_diffr = cross_diffr1 + cross_diffr2
cs_multidiff = cs_multi + cross_diffr
C***********************************************************************
else
cross_diffr = 0.D0
cross_diffr1 = 0.D0
cross_diffr2 = 0.D0
cs_multidiff = 0.D0
cs_multi = 0.D0
endif
if (NDIR.eq.3) then
crossection = cross_res+cross_dir+cs_multidiff+cross_frag2
RETURN
else if (NDIR.eq.0) then
crossection = cross_res+cross_dir+cross_diffr+cross_frag2
RETURN
else if (NDIR.eq.2) then
crossection = cross_res+cross_dir
RETURN
else if (NDIR.eq.1) then
crossection = cross_res
RETURN
else if (NDIR.eq.4) then
crossection = cross_dir
RETURN
else if (NDIR.eq.5) then
crossection = cs_multi
RETURN
else if (NDIR.eq.6) then
crossection = cross_res+cross_dir2
RETURN
else if (NDIR.eq.7) then
crossection = cross_res+cross_dir1
RETURN
else if (NDIR.eq.8) then
crossection = cross_res+cross_dir+cross_diffr1
RETURN
else if (NDIR.eq.9) then
crossection = cross_res+cross_dir+cross_diffr
RETURN
else if (NDIR.eq.10) then
crossection = cross_diffr
RETURN
else if ((NDIR.ge.11).and.(NDIR.le.19)) then
crossection = sig_res(NDIR-10)
RETURN
else
print*,'wrong input NDIR in crossection.f !'
STOP
endif
END
DOUBLE PRECISION function breitwigner(sigma_0,Gamma,
& DMM,eps_prime)
IMPLICIT DOUBLE PRECISION (A-M,O-Z)
IMPLICIT INTEGER (N)
SAVE
c***************************************************************************
c calculates Breit-Wigner cross section of a resonance with width Gamma [GeV],
c mass DMM [GeV], max. cross section sigma_0 [mubarn] and total mass of the
c interaction s [GeV]
c***************************************************************************
pm = 0.93827D0
s = pm*pm+2.D0*pm*eps_prime
gam2s = Gamma*Gamma*s
breitwigner = sigma_0
& *(s/eps_prime**2)*gam2s/((s-DMM*DMM)**2+gam2s)
RETURN
END
DOUBLE PRECISION function Pl(x,xth,xmax,alpha)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
if (xth.gt.x) then
Pl = 0.
RETURN
endif
a = alpha*xmax/xth
prod1 = ((x-xth)/(xmax-xth))**(a-alpha)
prod2 = (x/xmax)**(-a)
Pl = prod1*prod2
END
DOUBLE PRECISION function Ef(x,th,w)
IMPLICIT DOUBLE PRECISION (A-M,O-Z)
IMPLICIT INTEGER (N)
SAVE
wth = w+th
if (x.le.th) then
Ef = 0.
RETURN
else if (x.gt.th.and.x.lt.wth) then
Ef = (x-th)/w
RETURN
else if (x.ge.wth) then
Ef = 1.
RETURN
else
print*,'error in function EF'
STOP
endif
END
subroutine dec_inter3(eps_prime,Imode,L0)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
DOUBLE PRECISION RNDM
external RNDM
c*** decides which process takes place at eps_prime ********
c (6) excitation/decay of resonance ***
c (2) direct pion production: N\gamma --> N \pi ***
c (3) direct pion production: N\gamma --> \Delta \pi ***
c (1) diffractive scattering: N\gamma --> N \rho ***
c (4) diffractive scattering: N\gamma --> N \omega ***
c (0) multipion production (fragmentation) ***
c (5) fragmentation in resonance region ***
c***********************************************************
c** Date: 15/04/98 **
c** author: A.Muecke **
c**********************
tot = crossection(eps_prime,3,L0)
if (tot.eq.0.) tot = 1.D0
prob1 = crossection(eps_prime,1,L0)/tot
prob2 = crossection(eps_prime,7,L0)/tot
prob3 = crossection(eps_prime,2,L0)/tot
prob4 = crossection(eps_prime,8,L0)/tot
prob5 = crossection(eps_prime,9,L0)/tot
prob6 = crossection(eps_prime,0,L0)/tot
prob7 = 1.D0
rn = RNDM(0)
if (rn.lt.prob1) then
Imode = 6
c ... --> resonance decay
RETURN
else if (prob1.le.rn.and.rn.lt.prob2) then
Imode = 2
c ... --> direct channel: N\gamma --> N\pi
RETURN
else if (prob2.le.rn.and.rn.lt.prob3) then
Imode = 3
c ... --> direct channel: N\gamma --> \Delta \pi
RETURN
else if (prob3.le.rn.and.rn.lt.prob4) then
Imode = 1
c ... --> diffractive scattering: N\gamma --> N \rho
RETURN
else if (prob4.le.rn.and.rn.lt.prob5) then
Imode = 4
c ... --> diffractive scattering: N\gamma --> N \omega
RETURN
else if (prob5.le.rn.and.rn.lt.prob6) then
Imode = 5
c ... --> fragmentation (2) in resonance region
return
else if (prob6.le.rn.and.rn.lt.1.D0) then
Imode = 0
c ... --> fragmentation mode/multipion production
RETURN
else if (rn.eq.1.D0) then
Imode = 0
RETURN
else
print*,'error in dec_inter.f !'
STOP
endif
END
SUBROUTINE PROC_TWOPART(LA,LB,AMD,Lres,Pres,costheta,nbad)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /RES_FLAG/ FRES(49),XLIMRES(49)
SAVE
DIMENSION Pres(2000,5),Lres(2000)
c***********************************************************
c 2-particle decay of CMF mass AMD INTO M1 + M2
C NUCLEON ENERGY E0 [in GeV];
C E1,E2 [in GeV] are energies of decay products
c LA,LB are code numbers of decay products
c P1(1:5),P2(1:5) are 5-momenta of particles LA,LB;
c resulting momenta are calculated in CM frame;
c costheta is cos of scattering angle in CM frame
c this program also checks if the resulting particles are
c resonances; if yes, it is also allowed to decay a
c mass AMD < M1 + M2 by using the width of the resonance(s)
c***********************************************************
c** Date: 20/01/98 **
c** correct.:19/02/98**
c** author: A.Muecke **
c**********************
nbad = 0
SM1 = AM(LA)
if (LB.eq.0) then
SM2 = 2.D0*AM(7)
else
SM2 = AM(LB)
endif
E1 = (AMD*AMD + SM1*SM1 - SM2*SM2)/AMD/2.D0
E2 = (AMD*AMD + SM2*SM2 - SM1*SM1)/AMD/2.D0
c... check if SM1+SM2 < AMD:
if ((SM1+SM2).gt.AMD) then
c... if one of the decay products is a resonance, this 'problem' can
c be solved by using a reduced mass for the resonance and assume that
c this resonance is produced at its threshold;
if (FRES(LA).eq.1.D0) then
c ... particle LA is a resonance:
SM1 = AMD-SM2
E1 = SM1
E2 = AMD-E1
if (E1.lt.XLIMRES(LA).or.E2.lt.XLIMRES(LB)) nbad = 1
endif
if (FRES(LB).eq.1.D0) then
c ... particle LB is a resonance:
SM2 = AMD-SM1
E2 = SM2
E1 = AMD-E2
if (E1.lt.XLIMRES(LA).or.E2.lt.XLIMRES(LB)) nbad = 1
endif
c ... both particles are NOT resonances: -> error !
if (FRES(LA).eq.0.D0.and.FRES(LB).eq.0.D0) then
print*,'SM1 + SM2 > AMD in PROC_TWOPART',SM1,SM2,AMD,LA,LB
STOP
endif
endif
if (nbad.eq.0) then
PC = SQRT((E1*E1 - SM1*SM1))
Pres(1,4) = E1
Pres(2,4) = E2
Pres(1,5) = SM1
Pres(2,5) = SM2
C *********************************************************
c theta is scattering angle in CM frame:
r = RNDM(0)
P1Z= PC*costheta
P2Z=-PC*costheta
P1X = sqrt(r*(PC*PC-P1Z*P1Z))
P2X = sqrt(r*(PC*PC-P2Z*P2Z))
P1Y = sqrt((1.D0-r)*(PC*PC-P1Z*P1Z))
P2Y = sqrt((1.D0-r)*(PC*PC-P2Z*P2Z))
if(RNDM(0).lt.0.5D0) then
P1X = -P1X
else
P2X = -P2X
endif
if(RNDM(0).lt.0.5D0) then
P1Y = -P1Y
else
P2Y = -P2Y
endif
Pres(1,1) = P1X
Pres(1,2) = P1Y
Pres(1,3) = P1Z
Pres(2,1) = P2X
Pres(2,2) = P2Y
Pres(2,3) = P2Z
Lres(1) = LA
Lres(2) = LB
endif
RETURN
END
subroutine dec_res2(eps_prime,IRES,IRESMAX,L0)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
c*****************************************************************************
c*** decides which resonance with ID=IRES in list takes place at eps_prime ***
c*****************************************************************************
c** Date: 20/01/98 **
c** author: A.Muecke **
c**********************
DIMENSION prob_sum(9)
c*** sum of all resonances:
sumres = 0.D0
do 12 j=1,IRESMAX
j10 = j+10
sumres = sumres+crossection(eps_prime,j10,L0)
prob_sum(j) = sumres
12 continue
r = RNDM(0)
IRES = 0
i = 0
prob = 0.D0
10 continue
i = i+1
probold = prob
prob = prob_sum(i)/sumres
if (r.ge.probold.and.r.lt.prob) then
IRES = i
RETURN
endif
if (i.lt.IRESMAX) goto 10
if (r.eq.1.D0) IRES = i
if (IRES.eq.0) then
print*,'no resonance possible !'
STOP
endif
RETURN
END
subroutine dec_proc2(x,IPROC,IRANGE,IRES,L0)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
c**********************************************************************
c*** decide which decay with ID=IPROC of resonance IRES takes place ***
c**********************************************************************
c** Date: 20/01/98 **
c** correct.: 27/04/98*
c** author: A.Muecke **
c**********************
COMMON /SO_RESp/ CBRRES1p(18),CBRRES2p(36),CBRRES3p(26),
+ RESLIMp(36),ELIMITSp(9),KDECRES1p(90),KDECRES2p(180),
+ KDECRES3p(130),IDBRES1p(9),IDBRES2p(9),IDBRES3p(9)
COMMON /SO_RESn/ CBRRES1n(18),CBRRES2n(36),CBRRES3n(22),
+ RESLIMn(36),ELIMITSn(9),KDECRES1n(90),KDECRES2n(180),
+ KDECRES3n(110),IDBRES1n(9),IDBRES2n(9),IDBRES3n(9)
DIMENSION prob_sum(0:9)
c x = eps_prime
c ... choose arrays /SO_RESp/ for charged resonances,
c ... arrays /SO_RESn/ for neutral resonances
if (L0.eq.13) then
c ... charged resonances:
r = RNDM(0)
c... determine the energy range of the resonance:
nlim = ELIMITSp(IRES)
istart = (IRES-1)*4+1
if (nlim.gt.0) then
do ie=istart,nlim-2+istart
reslimp1 = RESLIMp(ie)
reslimp2 = RESLIMp(ie+1)
if (x.le.reslimp2.and.x.gt.reslimp1) then
IRANGE = ie+1-istart
endif
enddo
else
irange = 1
13 endif
IPROC = -1
i = 0
prob_sum(0) = 0.D0
if (IRANGE.eq.1) then
j = IDBRES1p(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in energy range 1'
endif
10 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES1p(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 10
if (r.eq.1.D0) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else if (IRANGE.eq.2) then
j = IDBRES2p(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in energy range 2'
endif
11 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES2p(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 11
if (r.eq.1.D0) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else if (IRANGE.eq.3) then
j = IDBRES3p(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in energy range 3'
endif
12 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES3p(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 12
if (r.eq.1.D0) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else
print*,'invalid IRANGE in DEC_PROC2'
endif
RETURN
else if (L0.eq.14) then
c ... neutral resonances:
r = RNDM(0)
c... determine the energy range of the resonance:
nlim = ELIMITSn(IRES)
istart = (IRES-1)*4+1
if (nlim.gt.0) then
do ie=istart,nlim-2+istart
if (x.le.RESLIMn(ie+1).and.x.gt.RESLIMn(ie)) then
IRANGE = ie+1-istart
endif
enddo
else
irange = 1
endif
IPROC = -1
i = 0
prob_sum(0) = 0.D0
if (IRANGE.eq.1) then
j = IDBRES1n(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in this energy range'
endif
20 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES1n(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 20
if (r.eq.1.D0) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else if (IRANGE.eq.2) then
j = IDBRES2n(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in this energy range'
endif
21 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES2n(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 21
if (r.eq.1.) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else if (IRANGE.eq.3) then
j = IDBRES3n(IRES)-1
if (j.eq.-1) then
print*,'invalid resonance in this energy range'
endif
22 continue
j = j+1
i = i+1
prob_sum(i) = CBRRES3n(j)
if (r.ge.prob_sum(i-1).and.r.lt.prob_sum(i)) then
IPROC = j
endif
if (prob_sum(i).lt.1.D0) goto 22
if (r.eq.1.D0) IPROC = j
if (IPROC.eq.-1) then
print*,'no resonance decay possible !'
endif
else
print*,'invalid IRANGE in DEC_PROC2'
endif
RETURN
else
print*,'no valid L0 in DEC_PROC !'
STOP
endif
END
SUBROUTINE RES_DECAY3(IRES,IPROC,IRANGE,s,L0,nbad)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
COMMON /SO_RESp/ CBRRES1p(18),CBRRES2p(36),CBRRES3p(26),
+ RESLIMp(36),ELIMITSp(9),KDECRES1p(90),KDECRES2p(180),
+ KDECRES3p(130),IDBRES1p(9),IDBRES2p(9),IDBRES3p(9)
COMMON /SO_RESn/ CBRRES1n(18),CBRRES2n(36),CBRRES3n(22),
+ RESLIMn(36),ELIMITSn(9),KDECRES1n(90),KDECRES2n(180),
+ KDECRES3n(110),IDBRES1n(9),IDBRES2n(9),IDBRES3n(9)
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
c COMMON /SO_CNAM/ NAMP (0:49)
c CHARACTER NAMP*6, NAMPRESp*6, NAMPRESn*6
* external scatangle, proc_twopart
c********************************************************
c RESONANCE AMD with code number IRES INTO M1 + M2
C PROTON ENERGY E0 [in GeV] IN DMM [in GeV]
C E1,E2 [in GeV] are energies of decay products
c LA,LB are code numbers of decay products
c P(1,1:5),P(2,1:5) are 5-momenta of particles LA,LB;
c resulting momenta are calculated in CM frame;
c ANGLESCAT is cos of scattering angle in CM frame
c********************************************************
c** Date: 20/01/98 **
c** correct.:28/04/98**
c** author: A.Muecke **
c**********************
c... determine decay products LA, LB:
NP = 2
if (L0.eq.13) then
c ... proton is incident nucleon:
if (IRANGE.eq.1) then
LA = KDECRES1p(5*(IPROC-1)+3)
LB = KDECRES1p(5*(IPROC-1)+4)
else if (IRANGE.eq.2) then
LA = KDECRES2p(5*(IPROC-1)+3)
LB = KDECRES2p(5*(IPROC-1)+4)
else if (IRANGE.eq.3) then
LA = KDECRES3p(5*(IPROC-1)+3)
LB = KDECRES3p(5*(IPROC-1)+4)
else
print*,'error in res_decay3'
endif
else if (L0.eq.14) then
c ... neutron is incident nucleon:
if (IRANGE.eq.1) then
LA = KDECRES1n(5*(IPROC-1)+3)
LB = KDECRES1n(5*(IPROC-1)+4)
else if (IRANGE.eq.2) then
LA = KDECRES2n(5*(IPROC-1)+3)
LB = KDECRES2n(5*(IPROC-1)+4)
else if (IRANGE.eq.3) then
LA = KDECRES3n(5*(IPROC-1)+3)
LB = KDECRES3n(5*(IPROC-1)+4)
else
print*,'error in res_decay3'
endif
else
print*,'no valid L0 in RES_DECAY'
STOP
endif
LLIST(1) = LA
LLIST(2) = LB
c... sample scattering angle:
call scatangle(anglescat,IRES,L0)
c ... 2-particle decay:
call proc_twopart(LA,LB,sqrt(s),LLIST,P,anglescat,nbad)
RETURN
END
c***********************************************************
C calculates functions for crossection of direct channel
c NOT isospin-corrected, simply a samelsurium of functions
c x is eps_prime in GeV (see main program)
C (see thesis of J.Rachen, p.45ff)
c note: neglect strange- and eta-channel
C***********************************************************
c** Date: 27/04/98 **
c** last chg:23/05/98**
c** author: A.Muecke **
c**********************
c
DOUBLE PRECISION FUNCTION singleback(x)
c****************************
c SINGLE PION CHANNEL
c****************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
singleback = 92.7D0*Pl(x,.152D0,.25D0,2.D0)
END
DOUBLE PRECISION FUNCTION twoback(x)
c*****************************
c TWO PION PRODUCTION
c*****************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
twoback = 37.7D0*Pl(x,.4D0,.6D0,2.D0)
END
subroutine scatangle(anglescat,IRES,L0)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
c*******************************************************************
c This routine samples the cos of the scattering angle for a given *
c resonance IRES and incident nucleon L0; it is exact for **
c one-pion decay channel and if there is no **
c other contribution to the cross section from another resonance **
c and an approximation for an overlay of resonances; **
c for decay channels other than the one-pion decay a isotropic **
c distribution is used **
c*******************************************************************
c** Date: 16/02/98 **
c** author: A.Muecke **
c**********************
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
c ... use rejection method for sampling:
LA = LLIST(1)
LB = LLIST(2)
10 continue
r = RNDM(0)
c*** sample anglescat random between -1 ... 1 **
anglescat = 2.D0*(r-0.5D0)
c ... distribution is isotropic for other than one-pion decays:
if ((LA.eq.13.or.LA.eq.14).and.LB.ge.6.and.LB.le.8) then
prob = probangle(IRES,L0,anglescat)
else
prob = 0.5D0
endif
r = RNDM(0)
if (r.le.prob) then
RETURN
else
goto 10
endif
12 continue
END
DOUBLE PRECISION function probangle(IRES,L0,z)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
c********************************************************************
c probability distribution for scattering angle of given resonance **
c IRES and incident nucleon L0 ; **
c z is cosine of scattering angle in CMF frame **
c********************************************************************
if (IRES.eq.4.or.IRES.eq.5.or.IRES.eq.2) then
c ... N1535 andf N1650 decay isotropically.
probangle = 0.5D0
return
endif
if (IRES.eq.1) then
c ... for D1232:
probangle = 0.636263D0 - 0.408790D0*z*z
return
endif
if (IRES.eq.3.and.L0.eq.14) then
c ... for N1520 and incident n:
probangle = 0.673669D0 - 0.521007D0*z*z
return
endif
if (IRES.eq.3.and.L0.eq.13) then
c ... for N1520 and incident p:
probangle = 0.739763D0 - 0.719288D0*z*z
return
endif
if (IRES.eq.6.and.L0.eq.14) then
c ... for N1680 (more precisely: N1675) and incident n:
q=z*z
probangle = 0.254005D0 + 1.427918D0*q - 1.149888D0*q*q
return
endif
if (IRES.eq.6.and.L0.eq.13) then
c ... for N1680 and incident p:
q=z*z
probangle = 0.189855D0 + 2.582610D0*q - 2.753625D0*q*q
return
endif
if (IRES.eq.7) then
c ... for D1700:
probangle = 0.450238D0 + 0.149285D0*z*z
return
endif
if (IRES.eq.8) then
c ... for D1905:
q=z*z
probangle = 0.230034D0 + 1.859396D0*q - 1.749161D0*q*q
return
endif
if (IRES.eq.9) then
c ... for D1950:
q=z*z
probangle = 0.397430D0 - 1.498240D0*q + 5.880814D0*q*q
& - 4.019252D0*q*q*q
return
endif
print*,'error in function probangle !'
STOP
END
C->
DOUBLE PRECISION FUNCTION GAUSS (FUN, A,B)
c*********************************************************
C Returns the 8 points Gauss-Legendre integral
C of function FUN from A to B
c this routine was provided by T.Stanev
c*********************************************************
c** Date: 20/01/98 **
c** A.Muecke **
c**********************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
EXTERNAL FUN
C...........................................................
DIMENSION X(8), W(8)
DATA X /.0950125098D0,.2816035507D0,.4580167776D0,.6178762444D0
+ ,.7554044083D0,.8656312023D0,.9445750230D0,.9894009349D0/
DATA W /.1894506104D0,.1826034150D0,.1691565193D0,.1495959888D0
+ ,.1246289712D0,.0951585116D0,.0622535239D0, .0271524594D0/
XM = 0.5D0*(B+A)
XR = 0.5D0*(B-A)
SS = 0.D0
DO NJ=1,8
DX = XR*X(NJ)
SS = SS + W(NJ) * (FUN(XM+DX) + FUN(XM-DX))
ENDDO
GAUSS = XR*SS
RETURN
END
C->
c***************************
c** last change: 12/10/98 **
c** author: A.Muecke **
c***************************
BLOCK DATA DATDEC
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /SO_CHP/ S_LIFE(49), ICHP(49), ISTR(49), IBAR(49)
COMMON /SO_CNAM/ NAMP (0:49)
CHARACTER NAMPRESp*6
COMMON /RES_PROPp/ AMRESp(9), BGAMMAp(9),WIDTHp(9),
+ RATIOJp(9),NAMPRESp(0:9)
CHARACTER NAMPRESn*6
COMMON /RES_PROPn/ AMRESn(9), BGAMMAn(9),WIDTHn(9),
+ RATIOJn(9),NAMPRESn(0:9)
COMMON /SO_RESp/ CBRRES1p(18),CBRRES2p(36),CBRRES3p(26),
+ RESLIMp(36),ELIMITSp(9),KDECRES1p(90),KDECRES2p(180),
+ KDECRES3p(130),IDBRES1p(9),IDBRES2p(9),IDBRES3p(9)
COMMON /SO_RESn/ CBRRES1n(18),CBRRES2n(36),CBRRES3n(22),
+ RESLIMn(36),ELIMITSn(9),KDECRES1n(90),KDECRES2n(180),
+ KDECRES3n(110),IDBRES1n(9),IDBRES2n(9),IDBRES3n(9)
COMMON /RES_FLAG/ FRES(49),XLIMRES(49)
CHARACTER NAMP*6
DATA Ideb / 0 /
DATA FRES /0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1/
DATA XLIMRES /0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.
+ ,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
+ .275,.275,.28,0.,0.,0.,0.,.41,.9954,0.,0.,0.,0.,0.,0.,
+ 1.078,1.08,1.078,1.08,0,0,0,0,0,1/
DATA AMRESp / 1.231,1.440,1.515,1.525,1.675,1.680,1.690,
+ 1.895,1.950/
DATA AMRESn / 1.231,1.440,1.515,1.525,1.675,1.675,1.690,
+ 1.895,1.950/
DATA IDBRES1p /
+ 1,3,5,7,9,11,13,15,17/
DATA IDBRES2p /
+ 0,1,6,11,14,19,24,27,32/
DATA IDBRES3p /
+ 0,0,1,0,3,9,16,21,26/
DATA IDBRES1n /
+ 1,3,5,7,9,11,13,15,17/
DATA IDBRES2n /
+ 0,1,6,11,14,19,24,27,32/
DATA IDBRES3n /
+ 0,0,1,0,3,0,9,14,19/
DATA CBRRES1p /
+ .667,1.,.667,1.,.667,1.,.667,1.,.667,1.,.667,1.,.667,1.,
+ .667,1.,.667,1./
DATA CBRRES1n /
+ .667,1.,.667,1.,.667,1.,.667,1.,.667,1.,.667,1.,.667,1.,
+ .667,1.,.667,1./
C************************** settings of versions 1.4 - 2.0 *********
DATA CBRRES2p /
+ .333,.5,.750,.917,1.,.333,.5,.75,.917,1.,.167,.25,1.,
+ .567,.85,.925,.975,1.,.433,.65,.825,.942,1.,.4,.467,1.,
+ .267,.4,.64,.68,1.,.4,.6,.76,.787,1./
DATA CBRRES2n /
+ .333,.5,.750,.917,1.,.333,.5,.75,.917,1.,.167,.25,1.,
+ .567,.85,.925,.975,1.,.267,.4,.7,.9,1.,.4,.467,1.,
+ .267,.4,.64,.68,1.,.4,.6,.76,.787,1./
DATA CBRRES3p /
+ .333,1.,.467,.7,.775,.825,.85,1.,.367,.55,.7,
+ 1.,.08,.093,.2,.733,1.,.667,1.,
+ .2,.3,.46,.487,.7,.9,1./
DATA CBRRES3n /
+ .333,1.,.467,.7,.775,.825,.85,1.,
+ .08,.093,.2,.733,1.,.667,1.,
+ .2,.3,.46,.487,.7,.9,1./
DATA KDECRES1p /
+ 2,0,13,6,0,2,0,14,7,0,2,0,14,7,0,2,0,13,6,0,2,0,14,7,0,
+ 2,0,13,6,0,2,0,14,7,0,2,0,13,6,0,2,0,14,7,0,2,0,13,6,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,13,6,0,2,0,14,7,0,2,0,13,6,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,14,7,0/
DATA KDECRES2p /
+ 2,0,14,7,0,2,0,13,6,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,13,23,0,2,0,14,7,0,2,0,13,6,0,
+ 2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,13,6,0,2,0,14,7,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,13,6,0,2,0,14,7,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0/
DATA KDECRES3p /
+ 2,0,13,27,0,2,0,14,25,0,
+ 2,0,14,7,0,2,0,13,6,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,39,9,0,
+ 2,0,14,7,0,2,0,13,6,0,
+ 2,0,13,27,0,2,0,14,25,0,2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,
+ 2,0,13,27,0,2,0,14,25,0,
+ 2,0,13,27,0,2,0,14,25,0,
+ 2,0,13,6,0,2,0,14,7,0,
+ 2,0,40,8,0,2,0,41,6,0,2,0,42,7,0,2,0,13,27,0,2,0,14,25,0/
DATA KDECRES1n /
+ 2,0,14,6,0,2,0,13,8,0,2,0,13,8,0,2,0,14,6,0,2,0,13,8,0,
+ 2,0,14,6,0,2,0,13,8,0,2,0,14,6,0,2,0,13,8,0,2,0,14,6,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,14,6,0,2,0,13,8,0,2,0,14,6,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,13,8,0/
DATA KDECRES2n /
+ 2,0,13,8,0,2,0,14,6,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,14,23,0,2,0,13,8,0,2,0,14,6,0,
+ 2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,14,6,0,2,0,13,8,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,14,6,0,2,0,13,8,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0/
DATA KDECRES3n /
+ 2,0,14,27,0,2,0,13,26,0,
+ 2,0,13,8,0,2,0,14,6,0,2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,39,21,0,
+ 2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,
+ 2,0,14,27,0,2,0,13,26,0,
+ 2,0,14,27,0,2,0,13,26,0,
+ 2,0,14,6,0,2,0,13,8,0,
+ 2,0,43,7,0,2,0,42,6,0,2,0,41,8,0,2,0,14,27,0,2,0,13,26,0/
DATA RESLIMp /
+ 0.,0.,0.,0.,0.,.54,10.,0.,0.,.54,1.09,10.,
+ 0.,.71,10.,0.,0.,.54,.918,10.,
+ 0.,.54,1.09,10.,0.,.54,1.09,10.,
+ 0.,.54,1.09,10.,0.,.54,1.09,10./
DATA RESLIMn /
+ 0.,.0,.0,.0,0.,.54,10.,0.,0.,.54,1.09,10.,
+ 0.,.71,10.,0.,0.,.54,.918,10.,
+ 0.,.54,10.,0.,0.,.54,1.09,10.,0.,.54,1.09,10.,
+ 0.,.54,1.09,10./
DATA ELIMITSp /0,3,4,3,4,4,4,4,4/
DATA ELIMITSn /0,3,4,3,4,3,4,4,4/
DATA NAMPRESp /
+ ' ','D+1232','N+1440','N+1520','N+1535','N+1650',
+ 'N+1680','D+1700','D+1905','D+1950'/
DATA NAMPRESn /
+ ' ','D01232','N01440','N01520','N01535','N01650',
+ 'N01675','D01700','D01905','D01950'/
DATA BGAMMAp /
+ 5.6,0.5,4.6,2.5,1.0,2.1,2.0,0.2,1.0/
DATA RATIOJp /
+ 1.,0.5,1.,0.5,0.5,1.5,1.,1.5,2./
DATA WIDTHp /
+ .11,.35,.11,.10,.16,.125,.29,.35,.3/
DATA BGAMMAn /
+ 6.1,0.3,4.0,2.5,0.,0.2,2.0,0.2,1.0/
DATA RATIOJn /
+ 1.,0.5,1.,0.5,0.5,1.5,1.,1.5,2./
DATA WIDTHn /
+ .11,.35,.11,.10,.16,.15,.29,.35,.3/
DATA CBR /3*1.,0.,1.,1.,0.6351,0.8468,0.9027,0.9200,0.9518,1.,
+ 0.6351,0.8468,0.9027,0.9200,0.9518,1.,0.2160,0.3398,0.4748,
+ 0.6098,0.8049,1.,0.6861,1.,3*0.,0.5,1.,0.5,1.,
+ 0.3890,0.7080,0.9440,0.9930,1.,0.,0.4420,0.6470,0.9470,0.9770,
+ 0.9990,4*1.,0.6670,1.,9*0.,0.6670,1.,0.6670,1.,0.6670,1.,
+ 0.8880,0.9730,1.,0.4950,0.8390,0.9870,1.,0.5160,5*1.,0.6410,1.,
+ 1.,0.67,1.,0.33,1.,1.,0.88,0.94,1.,0.88,0.94,1.,0.88,0.94,1.,
+ 0.33,1.,0.67,1.,0.678,0.914,1./
DATA AM / 0.,2*0.511E-3, 2*0.10566, 0.13497, 2*0.13957,
+ 2*0.49365, 2*0.49767, 0.93827, 0.93957, 4*0.,0.93827,
+ 0.93957, 2*0.49767, 0.54880,0.95750,2*0.76830,0.76860,
+ 2*0.89183,2*0.89610,0.78195,1.01941,1.18937,1.19255,
+ 1.19743,1.31490,1.32132,1.11563,1.23100,1.23500,
+ 1.23400,1.23300,1.38280,1.38370,1.38720,
+ 1.53180,1.53500,1.67243 /
DATA AM2 /0.,2*2.61121E-07,2*0.011164,0.018217,0.019480,
+ 0.019480,0.243690,0.243690,0.247675,0.247675,0.880351,0.882792,
+ 0.000000,0.000000,0.000000,0.000000,0.880351,0.882792,0.247675,
+ 0.247675,0.301181,0.916806,0.590285,0.590285,0.590746,0.795361,
+ 0.795361,0.802995,0.802995,0.611446,1.039197,1.414601,1.422176,
+ 1.433839,1.728962,1.745887,1.244630,1.515361,1.525225,1.522765,
+ 1.520289,1.912136,1.914626,1.924324,2.346411,2.356225,2.797022/
DATA IDB /
+ 0,0,0,1,2,3,5,6,7,13,19,25,8*0,30,32,34,40,46,47,48,49,60,62,
+ 64,66,69,73,75,76,77,78,79,81,82,84,86,87,90,93,96,98,100/
DATA KDEC /
+ 3,1,15,2,18,0,3,1,16,3,17,0,2,0,1,1,8*0,2,0,4,17,0,0,2,0,5,18,0,
+ 0,2,0,4,17,0,0,2,0,7,6,0,0,3,0,7,7,8,0,3,0,7,6,6,0,3,1,17,4,6,0,
+ 3,1,15,2,6,0,2,0,5,18,0,0,2,0,8,6,0,0,3,0,8,8,7,0,3,0,8,6,6,0,3,
+ 1,18,5,6,0,3,1,16,3,6,0,3,0,6,6,6,0,3,0,7,8,6,0,3,1,18,5,7,0,3,
+ 1,17,4,8,0,3,1,16,3,7,0,3,1,15,2,8,0,2,0,7,8,0,0,2,0,6,6,20*0,1,
+ 0,11,3*0,1,0,12,0,0,0,1,0,11,0,0,0,1,0,12,0,0,0,2,0,1,1,0,0,3,0,
+ 6,6,6,0,3,0,7,8,6,0,3,0,1,7,8,0,3,0,1,3,2,7*0,3,0,7,8,23,0,3,0,6
+ ,6,23,0,2,0,1,27,0,0,2,0,1,32,0,0,2,0,1,1,0,0,3,0,6,6,6,0,2,0,7,
+ 6,0,0,2,0,8,6,0,0,2,0,7,8,0,0,2,0,21,7,0,0,2,0,9,6,0,0,54*0,2,0,
+ 22,8,0,0,2,0,10,6,0,0,2,0,9,8,0,0,2,0,21,6,0,0,2,0,10,7,0,0,
+ 2,0,22,6,0,0,3,0,7,8,6,0,2,0,1,6,0,0,2,0,7,8,0,0,2,0,9,10,0,
+ 0,2,0,11,12,0,0,3,0,7,
+ 8,6,0,2,0,1,23,0,0,2,0,13,6,0,0,2,0,14,7,0,0,2,0,39,1,0,0,2,
+ 0,14,8,0,0,2,0,39,6,0,0,2,0,39,8,0,0,2,0,13,8,0,0,2,0,
+ 14,6,0,0,2,0,13,7,0,0,2,0,13,6,
+ 0,0,2,0,14,7,0,0,2,0,13,8,0,0,2,0,14,6,0,0,2,0,14,8,0,0,2,0,
+ 39,7,0,0,2,0,34,6,0,0,2,0,35,7,0,0,2,0,39,6,0,0,2,0,34,8,0,0,
+ 2,0,36,7,0,0,2,0,39,8,0,0,2,
+ 0,35,8,0,0,2,0,36,6,0,0,2,0,37,6,0,0,2,0,38,7,0,0,2,0,
+ 37,8,0,0,2,0,38,6,0,0,2,0,39,10,0,0,2,0,37,8,0,0,2,0,38,6,0,0/
DATA LBARP/1,3,2,5,4,6,8,7,10,9,11,12,-13,-14,16,15,18,17,13,14,
+ 22,21,23,24,26,25,27,29,28,31,30,32,33,-34,-35,-36,-37,-38,-39,
+ -40,-41,-42,-43,-44,-45,-46,-47,-48,-49/
DATA ICHP /0,1,-1,1,-1,0,1,-1,1,-1,0,0,1,0,4*0,-1,0,4*0,
+ 1,-1,0,1,-1,4*0,1,0,-1,0,-1,0,2,1,0,-1,1,0,-1,0,-1,-1/
DATA ISTR /8*0,-1,+1,10,10,8*0,-1,+1,5*0,-1,+1,-1,+1,2*0,
+ 3*1,2*2,1,4*0,3*1,2*2,3 /
DATA IBAR /12*0,2*1,4*0,2*-1,13*0,16*1/
DATA NAMP /
+ ' ','gam ','e+','e-','mu+','mu-','pi0',
+ 'pi+','pi-','k+', 'k-', 'k0l','k0s',
+ 'p', 'n', 'nue', 'nueb', 'num', 'numb', 'pbar', 'nbar',
+ 'k0', 'k0b', 'eta', 'etap', 'rho+', 'rho-','rho0',
+ 'k*+','k*-','k*0','k*0b','omeg', 'phi', 'SIG+', 'SIG0',
+ 'SIG-','XI0','XI-','LAM','DELT++','DELT+','DELT0','DELT-',
+ 'SIG*+ ','SIG*0','SIG*-', 'XI*0', 'XI*-', 'OME*-'/
DATA S_LIFE /0.,0.,0.,2.197D-6,2.197D-6,8.4D-17,2.6033D-8,
+ 2.6033D-8,1.2371D-8,1.2371D-8,
+ 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
+ 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
+ 0.,0.,0./
END
C->
BLOCK DATA SO_PARAM_INI
C....This block data contains default values
C. of the parameters used in fragmentation
C................................................
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
COMMON /SO_CZDIS/ FA, FB0
COMMON /SO_CZDISs/ FAs1, fAs2
COMMON /SO_CZLEAD/ CLEAD, FLEAD
COMMON /SO_CPSPL/ CCHIK(3,6:14)
COMMON /SO_CQDIS/ PPT0 (33),ptflag
COMMON /SO_CDIF0/ FFD, FBD, FDD
COMMON /SO_CFLAFR/ PAR(8)
C...Longitudinal Fragmentation function
DATA FA /0.5/, FB0 /0.8/
C...Longitudinal Fragmentation function for leading baryons
DATA CLEAD /0.0/, FLEAD /0.6/
c strange fragmentation
data FAs1 /3./, fAs2 /3./
c data FAs1 /0./, fAs2 /0./
C...pT of sea partons
DATA PTFLAG /1./
DATA PPT0 /0.30,0.30,0.450,30*0.60/
C...Splitting parameters
DATA CCHIK /21*2.,6*3./
C...Parameters of flavor formation
DATA PAR /0.04,0.25,0.25,0.14,0.3,0.3,0.15,0./
END
SUBROUTINE gamma_h(Ecm,ip1,Imode,ifbad)
C**********************************************************************
C
C simple simulation of low-energy interactions (R.E. 03/98)
C
C changed to simulate superposition of reggeon and pomeron exchange
C interface to Lund / JETSET 7.4 fragmentation
C (R.E. 08/98)
C
C
C
C input: ip1 incoming particle
C 13 - p
C 14 - n
C Ecm CM energy in GeV
C Imode interaction mode
C 0 - multi-pion fragmentation
C 5 - fragmentation in resonance region
C 1 - quasi-elastic / diffractive interaction
C (p/n-gamma --> n/p rho)
C 4 - quasi-elastic / diffractive interaction
C (p/n-gamma --> n/p omega)
C 2 - direct interaction (p/n-gamma --> n/p pi)
C 3 - direct interaction (p/n-gamma --> delta pi)
C IFBAD control flag
C (0 all OK,
C 1 generation of interaction not possible)
C
C**********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_RUN/ SQS, S, Q2MIN, XMIN, ZMIN, kb, kt, a1, a2, Nproc
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_CHP/ S_LIFE(49), ICHP(49), ISTR(49), IBAR(49)
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /SO_CFLAFR/ PAR(8)
SAVE
DIMENSION P_dec(10,5), P_in(5)
DIMENSION xs1(2), xs2(2), xmi(2), xma(2)
DIMENSION LL(10), Ijoin(4)
DOUBLE PRECISION PA1(4), PA2(4), P1(4), P2(4)
DATA Ic / 0 /
C second particle is always photon
IP2 = 1
C parameters of pi0 suppression
a1 = 0.5D0
a2 = 0.5D0
C parameter of strangeness suppression
PAR(2) = 0.18D0
C slope of pomeron trajectory
alphap = 0.25D0
ifbad = 0
SQS = Ecm
S = SQS*SQS
Ic = Ic+1
IF((Imode.eq.1).or.(Imode.eq.4)) THEN
C***********************************************************************
C simulation of diffraction
ipa = ip1
ipb = ip2
if(Imode.eq.1) then
Nproc = 1
if(ip1.eq.1) then
ipa = 27
else if(ip2.eq.1) then
ipb = 27
endif
else if(Imode.eq.4) then
Nproc = 4
if(ip1.eq.1) then
ipa = 32
else if(ip2.eq.1) then
ipb = 32
endif
endif
am_a = AM(ipa)
am_b = AM(ipb)
if(am_a+am_b.ge.Ecm-1.D-2) am_a = Ecm - am_b-1.D-2
C find t range
e1 = 0.5D0*(Ecm + AM(ip1)**2/Ecm - AM(ip2)**2/Ecm)
if(e1.gt.100.D0*AM(ip1)) then
pcm1 = e1 - 0.5D0*AM(ip1)**2/e1
else
pcm1 = sqrt((e1-AM(ip1))*(e1+AM(ip1)))
endif
e3 = 0.5D0*(Ecm + am_a**2/Ecm - am_b**2/Ecm)
if(e3.gt.100.D0*am_a) then
pcm3 = e3 - 0.5D0*am_a**2/e3
else
pcm3 = sqrt((e3-am_a)*(e3+am_a))
endif
t0 = ((AM(ip1)**2-am_a**2-AM(ip2)**2+am_b**2)/(2.D0*Ecm))**2
& -(pcm1-pcm3)**2-0.0001D0
t1 = ((AM(ip1)**2-am_a**2-AM(ip2)**2+am_b**2)/(2.D0*Ecm))**2
& -(pcm1+pcm3)**2+0.0001D0
C sample t
b = 6.5D0+2.D0*alphap*log(S)
t = 1.D0/b*log((exp(b*t0)-exp(b*t1))*RNDM(0)+exp(b*t1))
C kinematics
pl = (2.D0*e1*e3+t-AM(ip1)**2-am_a**2)/(2.D0*pcm1)
pt = (pcm3-pl)*(pcm3+pl)
if(pt.lt.0.D0) then
pl = sign(pcm3,pl)
pt = 1.D-6
else
pt = sqrt(pt)
endif
phi = 6.28318530717959D0*RNDM(0)
LLIST(1) = ipa
P(1,4) = e3
P(1,1) = SIN(phi)*pt
P(1,2) = COS(phi)*pt
P(1,3) = pl
P(1,5) = am_a
LLIST(2) = ipb
P(2,1) = -P(1,1)
P(2,2) = -P(1,2)
P(2,3) = -P(1,3)
P(2,4) = Ecm - P(1,4)
P(2,5) = am_b
np = 2
call DECSOP
ELSE IF((Imode.eq.2).or.(Imode.eq.3)) THEN
C***********************************************************************
C simulation of direct p-gamma process
if(ip1.eq.13) then
C projectile is a proton
if(Imode.eq.2) then
Nproc = 2
ipa = 14
ipb = 7
else
Nproc = 3
if(rndm(0).gt.0.25) then
ipa = 40
ipb = 8
else
ipa = 42
ipb = 7
endif
endif
else if(ip1.eq.14) then
C projectile is a neutron
if(Imode.eq.2) then
Nproc = 2
ipa = 13
ipb = 8
else
Nproc = 3
if(rndm(0).gt.0.25) then
ipa = 43
ipb = 7
else
ipa = 41
ipb = 8
endif
endif
endif
am_a = AM(ipa)
am_b = AM(ipb)
if(am_a+am_b.ge.Ecm-1.e-3) am_a = Ecm - am_b-1.D-3
C find t range
e1 = 0.5D0*(Ecm + AM(ip1)**2/Ecm - AM(ip2)**2/Ecm)
if(e1.gt.100.D0*AM(ip1)) then
pcm1 = e1 - 0.5D0*AM(ip1)**2/e1
else
pcm1 = sqrt((e1-AM(ip1))*(e1+AM(ip1)))
endif
e3 = 0.5D0*(Ecm + am_a**2/Ecm - am_b**2/Ecm)
if(e3.gt.100.D0*am_a) then
pcm3 = e3 - 0.5D0*am_a**2/e3
else
pcm3 = sqrt((e3-am_a)*(e3+am_a))
endif
t0 = ((AM(ip1)**2-am_a**2-AM(ip2)**2+am_b**2)/(2.D0*Ecm))**2
& -(pcm1-pcm3)**2-0.0001D0
t1 = ((AM(ip1)**2-am_a**2-AM(ip2)**2+am_b**2)/(2.D0*Ecm))**2
& -(pcm1+pcm3)**2+0.0001D0
C sample t
b = 12.D0
t = 1./b*log((exp(b*t0)-exp(b*t1))*RNDM(0)+exp(b*t1))
C kinematics
pl = (2.D0*e1*e3+t-AM(ip1)**2-am_a**2)/(2.D0*pcm1)
pt = (pcm3-pl)*(pcm3+pl)
if(pt.lt.0.D0) then
pl = sign(pcm3,pl)
pt = 1.D-6
else
pt = sqrt(pt)
endif
phi = 6.28318530717959D0*RNDM(0)
LLIST(1) = ipa
P(1,4) = e3
P(1,1) = SIN(phi)*pt
P(1,2) = COS(phi)*pt
P(1,3) = pl
P(1,5) = am_a
LLIST(2) = ipb
P(2,1) = -P(1,1)
P(2,2) = -P(1,2)
P(2,3) = -P(1,3)
P(2,4) = Ecm - P(1,4)
P(2,5) = am_b
np = 2
call DECSOP
ELSE
C***********************************************************************
C simulation of multiparticle production via fragmentation
Nproc = 0
SIG_reg = 129.D0*(S-AM(13)**2)**(-0.4525D0)
SIG_pom = 67.7D0*(S-AM(13)**2)**0.0808D0
if(S.gt.2.6D0) then
prob_reg = SIG_reg/(SIG_pom+SIG_reg)
else
prob_reg = 1.D0
endif
ptu =.36D0+.08D0*log10(sqs/30.D0)
s1 = 1.2D0
s2 = 0.6D0
as1 = s1**2/S
as2 = s2**2/S
if(s1+s2.ge.sqs-0.2) then
prob_reg = 1.D0
endif
itry = 0
100 continue
Istring = 0
C avoid infinite looping
itry = itry+1
if(itry.gt.50) then
print *,' gamma_h: more than 50 internal rejections,'
print *,' called with ip1,ip2,Ecm,Imode:',ip1,ip2,Ecm,Imode
PAUSE
ifbad = 1
return
endif
C simulate reggeon (one-string topology)
if(RNDM(0).lt.prob_reg) then
do i=1,1000
call valences(IP1,Ifl1a,Ifl1b)
call valences(IP2,Ifl2a,Ifl2b)
if(Ifl1b.eq.-Ifl2b) goto 200
enddo
print *,'gamma_h: simulation of reggeon impossible:',ip1,ip2
goto 100
200 continue
np = 0
Istring = 1
ee = Ecm/2.D0
250 continue
pt = ptu*sqrt(-log(max(1.D-10,RNDM(0))))
if(pt.ge.ee) goto 250
phi = 6.2831853D0*RNDM(0)
px = pt*COS(phi)
py = pt*SIN(phi)
pz = SQRT(ee**2-px**2-py**2)
call lund_put(1,Ifl1a,px,py,pz,ee)
px = -px
py = -py
pz = -pz
call lund_put(2,Ifl2a,px,py,pz,ee)
Ijoin(1) = 1
Ijoin(2) = 2
call lujoin(2,Ijoin)
call lund_frag(Ecm,NP)
if(NP.lt.0) then
if(Ideb.ge.5)
& print *,' gamma_h: rejection (1) by lund_frag, sqs:',Ecm
NP = 0
goto 100
endif
do i=1,NP
call lund_get(i,LLIST(i),
& P(i,1),P(i,2),P(i,3),P(i,4),P(i,5))
enddo
C simulate pomeron (two-string topology)
else
call valences(IP1,Ifl1a,Ifl1b)
call valences(IP2,Ifl2a,Ifl2b)
if(Ifl1a*Ifl2a.lt.0) then
j = Ifl2a
Ifl2a = Ifl2b
Ifl2b = j
endif
pl1 = (1.D0+as1-as2)
ps1 = 0.25D0*pl1**2-as1
if(ps1.le.0.D0) then
if(Ideb.ge.5) print *,' rejection by x-limits (1) ',Ecm
prob_reg = 1.D0
goto 100
endif
ps1 = sqrt(ps1)
xmi(1) = 0.5D0*pl1-ps1
xma(1) = 0.5D0*pl1+ps1
pl2 = (1.D0+as2-as1)
ps2 = 0.25D0*pl2**2-as2
if(ps2.le.0.D0) then
if(Ideb.ge.5) print *,' rejection by x-limits (2) ',Ecm
prob_reg = 1.D0
goto 100
endif
ps2 = sqrt(ps2)
xmi(2) = 0.5D0*pl2-ps2
xma(2) = 0.5D0*pl2+ps2
if((xmi(1).ge.xma(1)+0.05D0).or.
& (xmi(2).ge.xma(2)+0.05D0)) then
if(Ideb.ge.5) print *,' rejection by x-limits (3) ',Ecm
prob_reg = 1.D0
goto 100
endif
call PO_SELSX2(xs1,xs2,xmi,xma,as1,as2,Irej)
if(Irej.ne.0) then
if(Ideb.ge.5) print *,
& 'gamma_h: rejection by PO_SELSX2, sqs,m1,m2:',Ecm,s1,s2
prob_reg = 1.D0
goto 100
endif
NP = 0
Istring = 1
ee = SQRT(XS1(1)*XS2(1))*Ecm/2.D0
260 continue
pt = ptu*sqrt(-log(max(1.D-10,RNDM(0))))
if(pt.ge.ee) goto 260
phi = 6.2831853D0*RNDM(0)
px = pt*COS(phi)
py = pt*SIN(phi)
PA1(1) = px
PA1(2) = py
PA1(3) = XS1(1)*Ecm/2.D0
PA1(4) = PA1(3)
PA2(1) = -px
PA2(2) = -py
PA2(3) = -XS2(1)*Ecm/2.D0
PA2(4) = -PA2(3)
XM1 = 0.D0
XM2 = 0.D0
call PO_MSHELL(PA1,PA2,XM1,XM2,P1,P2)
px = P1(1)
py = P1(2)
pz = P1(3)
ee = P1(4)
call lund_put(1,Ifl1a,px,py,pz,ee)
px = P2(1)
py = P2(2)
pz = P2(3)
ee = P2(4)
call lund_put(2,Ifl2a,px,py,pz,ee)
Ijoin(1) = 1
Ijoin(2) = 2
call lujoin(2,Ijoin)
ee = SQRT(XS1(2)*XS2(2))*Ecm/2.D0
270 continue
pt = ptu*sqrt(-log(max(1.D-10,RNDM(0))))
if(pt.ge.ee) goto 270
phi = 6.2831853D0*RNDM(0)
px = pt*COS(phi)
py = pt*SIN(phi)
PA1(1) = px
PA1(2) = py
PA1(3) = XS1(2)*Ecm/2.D0
PA1(4) = PA1(3)
PA2(1) = -px
PA2(2) = -py
PA2(3) = -XS2(2)*Ecm/2.D0
PA2(4) = -PA2(3)
XM1 = 0.D0
XM2 = 0.D0
call PO_MSHELL(PA1,PA2,XM1,XM2,P1,P2)
px = P1(1)
py = P1(2)
pz = P1(3)
ee = P1(4)
call lund_put(3,Ifl1b,px,py,pz,ee)
px = P2(1)
py = P2(2)
pz = P2(3)
ee = P2(4)
call lund_put(4,Ifl2b,px,py,pz,ee)
Ijoin(1) = 3
Ijoin(2) = 4
call lujoin(2,Ijoin)
call lund_frag(Ecm,NP)
if(NP.lt.0) then
if(Ideb.ge.5)
& print *,' gamma_h: rejection (2) by lund_frag, sqs:',Ecm
NP = 0
prob_reg = prob_reg+0.1D0
goto 100
endif
do i=1,NP
call lund_get(i,LLIST(i),
& P(i,1),P(i,2),P(i,3),P(i,4),P(i,5))
enddo
endif
if(Ideb.ge.10) then
print *,' multi-pion event',Istring,NP
call print_event(1)
endif
C... for fragmentation in resonance region:
if (Imode.eq.5) goto 400
C leading baryon/meson effect
do j=1,np
if(((LLIST(J).eq.13).or.(LLIST(J).eq.14))
& .and.(p(j,3).lt.0.D0)) then
if(rndm(0).lt.(2.D0*p(j,4)/Ecm)**2) goto 100
endif
if((LLIST(J).ge.6).and.(LLIST(J).le.8)
& .and.(p(j,3).lt.-0.4D0)) then
if(rndm(0).lt.(2.D0*p(j,4)/Ecm)**2) goto 100
endif
enddo
C remove elastic/diffractive channels
ima_0 = 0
imb_0 = 0
ima_1 = 0
imb_1 = 0
ima_2 = 0
imb_2 = 0
imul = 0
if(ip1.eq.1) then
iba_0 = 6
iba_1 = 27
iba_2 = 32
else
iba_0 = ip1
iba_1 = ip1
iba_2 = ip1
endif
if(ip2.eq.1) then
ibb_0 = 6
ibb_1 = 27
ibb_2 = 32
else
ibb_0 = ip2
ibb_1 = ip2
ibb_2 = ip2
endif
do j=1,np
l1 = abs(LLIST(J))
if(l1.lt.10000) then
if(LLIST(J).eq.iba_0) ima_0 = 1
if(LLIST(J).eq.iba_1) ima_1 = 1
if(LLIST(J).eq.iba_2) ima_2 = 1
if(LLIST(J).eq.ibb_0) imb_0 = 1
if(LLIST(J).eq.ibb_1) imb_1 = 1
if(LLIST(J).eq.ibb_2) imb_2 = 1
imul = imul+1
endif
enddo
if(imul.eq.2) then
if(ima_0*imb_0.eq.1) goto 100
if(ima_1*imb_1.eq.1) goto 100
if(ima_2*imb_2.eq.1) goto 100
endif
C remove direct channels
if((imul.eq.2).and.
& (ip2.eq.1).and.((ip1.eq.13).or.(ip1.eq.14))) then
ima_0 = 0
imb_0 = 0
ima_1 = 0
imb_1 = 0
ima_2 = 0
imb_2 = 0
ima_3 = 0
imb_3 = 0
if(ip1.eq.13) then
iba_0 = 14
ibb_0 = 7
iba_1 = 40
ibb_1 = 8
iba_2 = 42
ibb_2 = 7
iba_3 = 13
ibb_3 = 23
else
iba_0 = 13
ibb_0 = 8
iba_1 = 43
ibb_1 = 7
iba_2 = 41
ibb_2 = 8
iba_3 = 14
ibb_3 = 23
endif
do j=1,np
l1 = abs(LLIST(J))
if(l1.lt.10000) then
if(LLIST(J).eq.iba_0) ima_0 = 1
if(LLIST(J).eq.iba_1) ima_1 = 1
if(LLIST(J).eq.iba_2) ima_2 = 1
if(LLIST(J).eq.iba_3) ima_3 = 1
if(LLIST(J).eq.ibb_0) imb_0 = 1
if(LLIST(J).eq.ibb_1) imb_1 = 1
if(LLIST(J).eq.ibb_2) imb_2 = 1
if(LLIST(J).eq.ibb_3) imb_3 = 1
endif
enddo
if(ima_0*imb_0.eq.1) goto 100
if(ima_1*imb_1.eq.1) goto 100
if(ima_2*imb_2.eq.1) goto 100
if(ima_3*imb_3.eq.1) goto 100
endif
C suppress events with many pi0's
ima_0 = 0
imb_0 = 0
do j=1,np
C neutral mesons
if(LLIST(J).eq.6) ima_0 = ima_0+1
if(LLIST(J).eq.11) ima_0 = ima_0+1
if(LLIST(J).eq.12) ima_0 = ima_0+1
if(LLIST(J).eq.21) ima_0 = ima_0+1
if(LLIST(J).eq.22) ima_0 = ima_0+1
if(LLIST(J).eq.23) ima_0 = ima_0+1
if(LLIST(J).eq.24) ima_0 = ima_0+1
if(LLIST(J).eq.27) ima_0 = ima_0+1
if(LLIST(J).eq.32) ima_0 = ima_0+1
if(LLIST(J).eq.33) ima_0 = ima_0+1
C charged mesons
if(LLIST(J).eq.7) imb_0 = imb_0+1
if(LLIST(J).eq.8) imb_0 = imb_0+1
if(LLIST(J).eq.9) imb_0 = imb_0+1
if(LLIST(J).eq.10) imb_0 = imb_0+1
if(LLIST(J).eq.25) imb_0 = imb_0+1
if(LLIST(J).eq.26) imb_0 = imb_0+1
enddo
prob_1 = a1*DBLE(imb_0)/max(DBLE(ima_0+imb_0),1.D0)+a2
if(RNDM(0).GT.prob_1) goto 100
C correct multiplicity at very low energies
ND = 0
E_ref_1 = 1.6D0
E_ref_2 = 1.95D0
if((imul.eq.3)
& .and.(Ecm.gt.E_ref_1).and.(Ecm.lt.E_ref_2)) then
ima_0 = 0
ima_1 = 0
ima_2 = 0
imb_0 = 0
imb_1 = 0
iba_0 = 0
iba_1 = 0
iba_2 = 0
ibb_0 = 0
ibb_1 = 0
C incoming proton
if(ip1.eq.13) then
iba_0 = 13
iba_1 = 7
iba_2 = 8
ibb_0 = 14
ibb_1 = 6
C incoming neutron
else if(ip1.eq.14) then
iba_0 = 14
iba_1 = 7
iba_2 = 8
ibb_0 = 13
ibb_1 = 6
endif
do j=1,np
if(LLIST(J).eq.iba_0) ima_0 = ima_0+1
if(LLIST(J).eq.iba_1) ima_1 = ima_1+1
if(LLIST(J).eq.iba_2) ima_2 = ima_2+1
if(LLIST(J).eq.ibb_0) imb_0 = imb_0+1
if(LLIST(J).eq.ibb_1) imb_1 = imb_1+1
enddo
C N gamma --> N pi+ pi-
if(ima_0*ima_1*ima_2.eq.1) then
Elog = LOG(Ecm)
Elog_1 = LOG(E_ref_1)
Elog_2 = LOG(E_ref_2)
prob = 0.1D0*4.D0/(Elog_2-Elog_1)**2
& *(Elog-Elog_1)*(Elog_2-Elog)
if(RNDM(0).lt.prob) then
LL(1) = ip1
LL(2) = 7
LL(3) = 8
LL(4) = 6
ND = 4
endif
endif
endif
E_ref_1 = 1.95D0
E_ref_2 = 2.55D0
if((imul.eq.4)
& .and.(Ecm.gt.E_ref_1).and.(Ecm.lt.E_ref_2)) then
ima_0 = 0
ima_1 = 0
ima_2 = 0
imb_0 = 0
imb_1 = 0
iba_0 = 0
iba_1 = 0
iba_2 = 0
ibb_0 = 0
ibb_1 = 0
C incoming proton
if(ip1.eq.13) then
iba_0 = 13
iba_1 = 7
iba_2 = 8
ibb_0 = 14
ibb_1 = 6
C incoming neutron
else if(ip1.eq.14) then
iba_0 = 14
iba_1 = 7
iba_2 = 8
ibb_0 = 13
ibb_1 = 6
endif
do j=1,np
if(LLIST(J).eq.iba_0) ima_0 = ima_0+1
if(LLIST(J).eq.iba_1) ima_1 = ima_1+1
if(LLIST(J).eq.iba_2) ima_2 = ima_2+1
if(LLIST(J).eq.ibb_0) imb_0 = imb_0+1
if(LLIST(J).eq.ibb_1) imb_1 = imb_1+1
enddo
C N gamma --> N pi+ pi- pi0
if(ima_0*ima_1*ima_2*imb_1.eq.1) then
Elog = LOG(Ecm)
Elog_2 = LOG(E_ref_2)
Elog_1 = LOG(E_ref_1)
prob = 0.1D0*4.D0/(Elog_2-Elog_1)**2
& *(Elog-Elog_1)*(Elog_2-Elog)
if(RNDM(0).lt.prob) then
if(ip1.eq.13) then
LL(1) = 14
LL(2) = 7
LL(3) = 7
LL(4) = 8
else
LL(1) = 13
LL(2) = 7
LL(3) = 8
LL(4) = 8
endif
ND = 4
endif
endif
endif
if(ND.gt.0) then
P_in(1) = 0.D0
P_in(2) = 0.D0
P_in(3) = 0.D0
P_in(4) = Ecm
P_in(5) = Ecm
call SO_DECPAR(0,P_in,ND,LL,P_dec)
Iflip = 0
do j=1,ND
LLIST(j) = LL(j)
do k=1,5
P(j,k) = P_dec(j,k)
enddo
if(((LLIST(j).eq.13).or.(LLIST(j).eq.14))
& .and.(P(j,3).lt.0.D0)) Iflip = 1
enddo
if(Iflip.ne.0) then
do j=1,ND
P(j,3) = -P(j,3)
enddo
endif
NP = ND
endif
C... for fragmentation in resonance region:
400 continue
call DECSOP
ENDIF
if(Ideb.ge.10) then
if(Ideb.ge.20) then
call print_event(2)
else
call print_event(1)
endif
endif
IQchr = ICHP(ip1)+ICHP(ip2)
IQbar = IBAR(ip1)+IBAR(ip2)
call check_event(-Ic,Ecm,0.D0,0.D0,0.D0,IQchr,IQbar,Irej)
end
SUBROUTINE print_event(Iout)
C*********************************************************************
C
C print final state particles
C
C (R.E. 03/98)
C
C**********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_RUN/ SQS, S, Q2MIN, XMIN, ZMIN, kb, kt, a1, a2, Nproc
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
COMMON /SO_CHP/ S_LIFE(49), ICHP(49), ISTR(49), IBAR(49)
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /SO_CNAM/ NAMP (0:49)
CHARACTER*6 NAMP
CHARACTER CODE*18
SAVE
if(iout.gt.0) then
print *,' --------------------------------------------------'
if(Nproc.eq.1) then
print *,' diffractive rho-0 production',Nproc
else if(Nproc.eq.2) then
print *,' direct interaction 1',Nproc
else if(Nproc.eq.3) then
print *,' direct interaction 2',Nproc
else if(Nproc.eq.4) then
print *,' diffractive omega production',Nproc
else if(Nproc.eq.0) then
print *,' multi-pion/fragmentation contribution',Nproc
else if((Nproc.gt.10).and.(Nproc.lt.20)) then
print *,' resonance production and decay',Nproc-10
else
print *,' unknown process',Nproc
endif
i0 = 0
px = 0.D0
py = 0.D0
pz = 0.D0
ee = 0.D0
ichar = 0
ibary = 0
do j=1,np
l1 = abs(LLIST(J))
l = mod(llist(j),10000)
if(l1.lt.10000) then
px = px + P(j,1)
py = py + P(j,2)
pz = pz + P(j,3)
ee = ee + P(j,4)
ichar = ichar+sign(1,l)*ICHP(iabs(l))
ibary = ibary+sign(1,l)*IBAR(iabs(l))
endif
if((l1.lt.10000).or.(Iout.GE.2)) then
i0 = i0+1
code = ' '
code(1:6) = namp(iabs(l))
if (l .lt. 0) code(7:9) = 'bar'
write (6,120) i0,CODE,l1*sign(1,l),sign(1,l)*ICHP(iabs(l)),
& (P(j,k),k=1,4)
endif
enddo
write (6,122) ' sum: ',px,py,pz,ee
print *,' charge QN: ',ichar,' baryon QN: ',ibary
print *,' --------------------------------------------------'
120 FORMAT(1X,I4,1X,A18,1X,I6,1X,I2,1X,2(F9.3,2X),2(E9.3,2X))
122 FORMAT(7X,A8,20X,2(F9.3,2X),2(E9.3,2X))
endif
END
SUBROUTINE check_event(Ic,Esum,PXsum,PYsum,PZsum,IQchr,IQbar,Irej)
C***********************************************************************
C
C check energy-momentum and quantum number conservation
C
C (R.E. 08/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_RUN/ SQS, S, Q2MIN, XMIN, ZMIN, kb, kt, a1, a2, Nproc
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
COMMON /SO_CHP/ S_LIFE(49), ICHP(49), ISTR(49), IBAR(49)
COMMON /SO_MASS1/ AM(49), AM2(49)
COMMON /SO_CNAM/ NAMP (0:49)
CHARACTER*6 NAMP
SAVE
px = 0.D0
py = 0.D0
pz = 0.D0
ee = 0.D0
ichar = 0
ibary = 0
Iprint = 0
PLscale = Esum
PTscale = 1.D0
do j=1,np
l1 = abs(LLIST(J))
l = mod(llist(j),10000)
if(l1.lt.10000) then
px = px + P(j,1)
py = py + P(j,2)
pz = pz + P(j,3)
ee = ee + P(j,4)
ichar = ichar+sign(1,l)*ICHP(iabs(l))
ibary = ibary+sign(1,l)*IBAR(iabs(l))
endif
enddo
if(ichar.ne.IQchr) then
print *,' charge conservation violated',Ic
Iprint = 1
endif
if(ibary.ne.IQbar) then
print *,' baryon number conservation violated',Ic
Iprint = 1
endif
if(abs((px-PXsum)/MAX(PXsum,PTscale)).gt.1.D-3) then
print *,' x momentum conservation violated',Ic
Iprint = 1
endif
if(abs((py-PYsum)/MAX(PYsum,PTscale)).gt.1.D-3) then
print *,' y momentum conservation violated',Ic
Iprint = 1
endif
if(abs((pz-Pzsum)/MAX(ABS(PZsum),PLscale)).gt.1.D-3) then
print *,' z momentum conservation violated',Ic
Iprint = 1
endif
if(abs((ee-Esum)/MAX(Esum,1.D0)).gt.1.D-3) then
print *,' energy conservation violated',Ic
Iprint = 1
endif
if(Iprint.ne.0) call print_event(1)
Irej = Iprint
END
SUBROUTINE valences(ip,ival1,ival2)
C**********************************************************************
C
C valence quark composition of various particles (R.E. 03/98)
C (with special treatment of photons)
C
C**********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
if(ip.eq.1) then
if(rndm(0).gt.0.2D0) then
ival1 = 1
ival2 = -1
else
ival1 = 2
ival2 = -2
endif
else if(ip.eq.6) then
if(rndm(0).gt.0.5D0) then
ival1 = 1
ival2 = -1
else
ival1 = 2
ival2 = -2
endif
else if(ip.eq.7) then
ival1 = 1
ival2 = -2
else if(ip.eq.8) then
ival1 = 2
ival2 = -1
else if(ip.eq.13) then
Xi = rndm(0)
if(Xi.lt.0.3333D0) then
ival1 = 12
ival2 = 1
else if(Xi.lt.0.6666D0) then
ival1 = 21
ival2 = 1
else
ival1 = 11
ival2 = 2
endif
else if(ip.eq.14) then
Xi = rndm(0)
if(Xi.lt.0.3333D0) then
ival1 = 12
ival2 = 2
else if(Xi.lt.0.6666D0) then
ival1 = 21
ival2 = 2
else
ival1 = 22
ival2 = 1
endif
endif
if((ip.lt.13).and.(rndm(0).lt.0.5D0)) then
k = ival1
ival1 = ival2
ival2 = k
endif
END
SUBROUTINE DECSOP
C***********************************************************************
C
C Decay all unstable particle in SIBYLL
C decayed particle have the code increased by 10000
C
C (taken from SIBYLL 1.7, R.E. 04/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
COMMON /SO_PLIST/ P(2000,5), LLIST(2000), NP, Ideb
COMMON /SO_PLIST1/ LLIST1(2000)
SAVE
DIMENSION P0(5), LL(10), PD(10,5)
NN = 1
DO J=1,NP
LLIST1(J) = 0
ENDDO
DO WHILE (NN .LE. NP)
L= LLIST(NN)
IF (IDB(IABS(L)) .GT. 0) THEN
DO K=1,5
P0(K) = P(NN,K)
ENDDO
ND = 0
CALL SO_DECPAR (L,P0,ND,LL,PD)
LLIST(NN) = LLIST(NN)+ISIGN(10000,LLIST(NN))
DO J=1,ND
DO K=1,5
P(NP+J,K) = PD(J,K)
ENDDO
LLIST(NP+J)=LL(J)
LLIST1(NP+J)=NN
ENDDO
NP=NP+ND
ENDIF
NN = NN+1
ENDDO
END
SUBROUTINE SO_DECPAR(LA,P0,ND,LL,P)
C***********************************************************************
C
C This subroutine generates the decay of a particle
C with ID = LA, and 5-momentum P0(1:5)
C into ND particles of 5-momenta P(j,1:5) (j=1:ND)
C
C If the initial particle code is LA=0
C then ND and LL(1:ND) are considered as input and
C the routine generates a phase space decay into ND
C particles of codes LL(1:nd)
C
C (taken from SIBYLL 1.7, muon decay corrected, R.E. 04/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON /SO_CSYDEC/ CBR(102), IDB(49), KDEC(612), LBARP(49)
COMMON /SO_MASS1/ AM(49), AM2(49)
SAVE
DIMENSION P0(5), LL(10), P(10,5)
DIMENSION PV(10,5), RORD(10), UE(3),BE(3), FACN(3:10)
DATA FACN /2.D0,5.D0,15.D0,60.D0,250.D0,
+ 1500.D0,12000.D0,120000.D0/
DATA PI /3.1415926D0/
C...c.m.s. Momentum in two particle decays
PAWT(A,B,C) = SQRT((A**2-(B+C)**2)*(A**2-(B-C)**2))/(2.D0*A)
C...Phase space decay into the particles in the list
IF (LA .EQ. 0) THEN
MAT = 0
MBST = 0
PS = 0.
DO J=1,ND
P (J,5) = AM(IABS(LL(J)))
PV(J,5) = AM(IABS(LL(J)))
PS = PS+P(J,5)
ENDDO
DO J=1,4
PV(1,J) = P0(J)
ENDDO
PV(1,5) = P0(5)
GOTO 140
ENDIF
C...Choose decay channel
L = IABS(LA)
ND=0
IDC = IDB(L)-1
IF (IDC+1 .LE.0) RETURN
RBR = RNDM(0)
110 IDC=IDC+1
IF(RBR.GT.CBR(IDC)) GOTO 110
KD =6*(IDC-1)+1
ND = KDEC(KD)
MAT= KDEC(KD+1)
MBST=0
IF (MAT .GT.0 .AND. P0(4) .GT. 20.D0*P0(5)) MBST=1
IF (MAT .GT.0 .AND. MBST .EQ. 0)
+ BETA = SQRT(P0(1)**2+P0(2)**2+P0(3)**2)/P0(4)
PS = 0.D0
DO J=1,ND
LL(J) = KDEC(KD+1+J)
P(J,5) = AM(LL(J))
PV(J,5) = AM(LL(J))
PS = PS + P(J,5)
ENDDO
DO J=1,4
PV(1,J) = 0.D0
IF (MBST .EQ. 0) PV(1,J) = P0(J)
ENDDO
IF (MBST .EQ. 1) PV(1,4) = P0(5)
PV(1,5) = P0(5)
140 IF (ND .EQ. 2) GOTO 280
IF (ND .EQ. 1) THEN
DO J=1,4
P(1,J) = P0(J)
ENDDO
RETURN
ENDIF
C...Calculate maximum weight for ND-particle decay
WWTMAX = 1.D0/FACN(ND)
PMAX=PV(1,5)-PS+P(ND,5)
PMIN=0.D0
DO IL=ND-1,1,-1
PMAX = PMAX+P(IL,5)
PMIN = PMIN+P(IL+1,5)
WWTMAX = WWTMAX*PAWT(PMAX,PMIN,P(IL,5))
ENDDO
C...generation of the masses, compute weight, if rejected try again
240 RORD(1) = 1.D0
DO 260 IL1=2,ND-1
RSAV = RNDM(0)
DO 250 IL2=IL1-1,1,-1
IF(RSAV.LE.RORD(IL2)) GOTO 260
250 RORD(IL2+1)=RORD(IL2)
260 RORD(IL2+1)=RSAV
RORD(ND) = 0.D0
WT = 1.D0
DO 270 IL=ND-1,1,-1
PV(IL,5)=PV(IL+1,5)+P(IL,5)+(RORD(IL)-RORD(IL+1))*(PV(1,5)-PS)
270 WT=WT*PAWT(PV(IL,5),PV(IL+1,5),P(IL,5))
IF (WT.LT.RNDM(0)*WWTMAX) GOTO 240
C...Perform two particle decays in respective cm frame
280 DO 300 IL=1,ND-1
PA=PAWT(PV(IL,5),PV(IL+1,5),P(IL,5))
UE(3)=2.D0*RNDM(0)-1.D0
PHI=2.D0*PI*RNDM(0)
UT = SQRT(1.D0-UE(3)**2)
UE(1) = UT*COS(PHI)
UE(2) = UT*SIN(PHI)
DO 290 J=1,3
P(IL,J)=PA*UE(J)
290 PV(IL+1,J)=-PA*UE(J)
P(IL,4)=SQRT(PA**2+P(IL,5)**2)
300 PV(IL+1,4)=SQRT(PA**2+PV(IL+1,5)**2)
C...Lorentz transform decay products to lab frame
DO 310 J=1,4
310 P(ND,J)=PV(ND,J)
DO 340 IL=ND-1,1,-1
DO 320 J=1,3
320 BE(J)=PV(IL,J)/PV(IL,4)
GA=PV(IL,4)/PV(IL,5)
DO 340 I=IL,ND
BEP = BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
DO 330 J=1,3
330 P(I,J)=P(I,J)+GA*(GA*BEP/(1.+GA)+P(I,4))*BE(J)
340 P(I,4)=GA*(P(I,4)+BEP)
C...Weak decays
IF (MAT .EQ. 1) THEN
F1=P(2,4)*P(3,4)-P(2,1)*P(3,1)-P(2,2)*P(3,2)-P(2,3)*P(3,3)
IF (MBST.EQ.1) WT = P0(5)*P(1,4)*F1
IF (MBST.EQ.0)
+ WT=F1*(P(1,4)*P0(4)-P(1,1)*P0(1)-P(1,2)*P0(2)-P(1,3)*P0(3))
WTMAX = P0(5)**4/16.D0
IF(WT.LT.RNDM(0)*WTMAX) GOTO 240
ENDIF
C...Boost back for rapidly moving particle
IF (MBST .EQ. 1) THEN
DO 440 J=1,3
440 BE(J)=P0(J)/P0(4)
GA= P0(4)/P0(5)
DO 460 I=1,ND
BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
DO 450 J=1,3
450 P(I,J)=P(I,J)+GA*(GA*BEP/(1.+GA)+P(I,4))*BE(J)
460 P(I,4)=GA*(P(I,4)+BEP)
ENDIF
C...labels for antiparticle decay
IF (LA .LT. 0 .AND. L .GT. 18) THEN
DO J=1,ND
LL(J) = LBARP(LL(J))
ENDDO
ENDIF
END
SUBROUTINE PO_ALTRA(GA,BGX,BGY,BGZ,PCX,PCY,PCZ,EC,P,PX,PY,PZ,E)
C*********************************************************************
C
C arbitrary Lorentz transformation
C
C (taken from PHOJET v1.12, R.E. 08/98)
C
C*********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
EP=PCX*BGX+PCY*BGY+PCZ*BGZ
PE=EP/(GA+1.D0)+EC
PX=PCX+BGX*PE
PY=PCY+BGY*PE
PZ=PCZ+BGZ*PE
P=SQRT(PX*PX+PY*PY+PZ*PZ)
E=GA*EC+EP
END
SUBROUTINE PO_TRANS(XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
C**********************************************************************
C
C rotation of coordinate frame (1) de rotation around y axis
C (2) fe rotation around z axis
C
C (taken from PHOJET v1.12, R.E. 08/98)
C
C**********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
X= CDE*CFE*XO-SFE*YO+SDE*CFE*ZO
Y= CDE*SFE*XO+CFE*YO+SDE*SFE*ZO
Z=-SDE *XO +CDE *ZO
END
SUBROUTINE PO_SELSX2(XS1,XS2,XMIN,XMAX,AS1,AS2,IREJ)
C***********************************************************************
C
C select x values of soft string ends using PO_RNDBET
C
C (taken from PHOJET v1.12, R.E. 08/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
DIMENSION XS1(2),XS2(2)
DIMENSION XMIN(2),XMAX(2)
IREJ = 0
GAM1 = +1.5D0 + 1.D0
GAM2 = -0.5D0 + 1.D0
BET1 = -0.5D0 + 1.D0
BET2 = -0.5D0 + 1.D0
ITRY0 = 0
DO 100 I=1,100
ITRY1 = 0
10 CONTINUE
X1 = PO_RNDBET(GAM1,BET1)
ITRY1 = ITRY1+1
IF(ITRY1.GE.50) THEN
IREJ = 1
RETURN
ENDIF
IF((X1.LE.XMIN(1)).OR.(X1.GE.XMAX(1))) GOTO 10
ITRY2 = 0
11 CONTINUE
X2 = PO_RNDBET(GAM2,BET2)
ITRY2 = ITRY2+1
IF(ITRY2.GE.50) THEN
IREJ = 2
RETURN
ENDIF
IF((X2.LE.XMIN(2)).OR.(X2.GE.XMAX(2))) GOTO 11
X3 = 1.D0 - X1
X4 = 1.D0 - X2
IF(X1*X2.GT.AS1) THEN
IF(X3*X4.GT.AS2) GOTO 300
ENDIF
ITRY0 = ITRY0+1
100 CONTINUE
IREJ = 3
RETURN
300 CONTINUE
XS1(1) = X1
XS1(2) = X3
XS2(1) = X2
XS2(2) = X4
END
DOUBLE PRECISION FUNCTION PO_RNDBET(GAM,ETA)
C********************************************************************
C
C random number generation from beta
C distribution in region 0 < X < 1.
C F(X) = X**(GAM-1.)*(1.-X)**(ETA-1)*GAMM(ETA+GAM) / (GAMM(GAM
C *GAMM(ETA))
C
C (taken from PHOJET v1.12, R.E. 08/98)
C
C********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
Y = PO_RNDGAM(1.D0,GAM)
Z = PO_RNDGAM(1.D0,ETA)
PO_RNDBET = Y/(Y+Z)
END
DOUBLE PRECISION FUNCTION PO_RNDGAM(ALAM,ETA)
C********************************************************************
C
C random number selection from gamma distribution
C F(X) = ALAM**ETA*X**(ETA-1)*EXP(-ALAM*X) / GAM(ETA)
C
C (taken from PHOJET v1.12, R.E. 08/98)
C
C********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
SAVE
NCOU=0
N = ETA
F = ETA - N
IF(F.EQ.0.D0) GOTO 20
10 R = RNDM(0)
NCOU=NCOU+1
IF (NCOU.GE.11) GOTO 20
IF(R.LT.F/(F+2.71828D0)) GOTO 30
YYY=LOG(RNDM(0)+1.e-7)/F
IF(ABS(YYY).GT.50.D0) GOTO 20
Y = EXP(YYY)
IF(LOG(RNDM(0)+1.D-7).GT.-Y) GOTO 10
GOTO 40
20 Y = 0.D0
GOTO 50
30 Y = 1.D0-LOG(RNDM(0)+1.D-7)
IF(RNDM(0).GT.Y**(F-1.D0)) GOTO 10
40 IF(N.EQ.0) GOTO 70
50 Z = 1.D0
DO 60 I = 1,N
60 Z = Z*RNDM(0)
Y = Y-LOG(Z+1.D-7)
70 PO_RNDGAM = Y/ALAM
END
SUBROUTINE lund_frag(SQS,NP)
C***********************************************************************
C
C interface to Lund/Jetset fragmentation
C
C (R.E. 08/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON/LUJETS/K(4000,5),P(4000,5),V(4000,5),N
COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
SAVE
DATA init / 0 /
if(init.eq.0) then
C no title page
MSTU(12) = 0
C define some particles as stable
MSTJ(22) = 2
C in addition pi0 stable
KC=LUCOMP(111)
MDCY(KC,1)=0
C switch popcorn effect off
MSTJ(12) = 1
C suppress all warning and error messages
MSTU(22) = 0
MSTU(25) = 0
init = 1
endif
C set energy dependent parameters
IF(SQS.LT.2.D0) THEN
PARJ(36) = 0.1D0
ELSE IF(SQS.LT.4.D0) THEN
PARJ(36) = 0.7D0*(SQS-2.D0)/2.D0+0.1D0
ELSE
PARJ(36) = 0.8D0
ENDIF
C fragment string configuration
II = MSTU(21)
MSTU(21) = 1
CALL LUEXEC
MSTU(21) = II
C event accepted?
if(MSTU(24).ne.0) then
NP = -1
return
endif
CALL LUEDIT(1)
NP = KLU(0,1)
END
SUBROUTINE lund_put(I,IFL,PX,PY,PZ,EE)
C***********************************************************************
C
C store initial configuration into Lund common block
C
C (R.E. 08/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON/LUJETS/K(4000,5),P(4000,5),V(4000,5),N
COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
SAVE
if(IFL.eq.1) then
Il = 2
else if(IFL.eq.-1) then
Il = -2
else if(IFL.eq.2) then
Il = 1
else if(IFL.eq.-2) then
Il = -1
else if(IFL.eq.11) then
Il = 2203
else if(IFL.eq.12) then
Il = 2101
else if(IFL.eq.21) then
Il = 2103
else if(IFL.eq.22) then
Il = 1103
else
print *,' lund_put: unkown flavor code',IFL
endif
P(I,1) = PX
P(I,2) = PY
P(I,3) = PZ
P(I,4) = EE
P(I,5) = (EE-PZ)*(EE+PZ)-PX**2-PY**2
K(I,1) = 1
K(I,2) = Il
K(I,3) = 0
K(I,4) = 0
K(I,5) = 0
N = I
END
SUBROUTINE lund_get(I,IFL,PX,PY,PZ,EE,XM)
C***********************************************************************
C
C read final states from Lund common block
C
C (R.E. 08/98)
C
C***********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
COMMON/LUJETS/K(4000,5),P(4000,5),V(4000,5),N
COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
SAVE
PX = PLU(I,1)
PY = PLU(I,2)
PZ = PLU(I,3)
EE = PLU(I,4)
XM = PLU(I,5)
Il = KLU(I,8)
C convert particle ID
IFL = ICON_PDG_SIB(Il)
END
INTEGER FUNCTION ICON_PDG_SIB(ID)
C************************************************************************
C
C convert PDG particle codes to SIBYLL particle codes
C
C (R.E. 09/97)
C
C************************************************************************
SAVE
DIMENSION ITABLE(49)
DATA ITABLE /
& 22, -11, 11, -13, 13, 111, 211, -211, 321, -321, 130, 310, 2212,
& 2112, 12, -12, 14, -14, -99999999, -99999999, 311, -311, 221,
& 331, 213, -213, 113, 323, -323, 313, -313, 223, 333, 3222, 3212,
& 3112, 3322, 3312, 3122, 2224, 2214, 2114, 1114, 3224, 3214,
& 3114, 3324, 3314, 3334 /
IDPDG = ID
100 CONTINUE
IDA = ABS(ID)
IF(IDA.GT.1000) THEN
IS = IDA
IC = SIGN(1,IDPDG)
ELSE
IS = IDPDG
IC = 1
ENDIF
DO I=1,49
IF(IS.EQ.ITABLE(I)) THEN
ICON_PDG_SIB = I*IC
RETURN
ENDIF
ENDDO
IF(IDPDG.EQ.80000) THEN
ICON_PDG_SIB = 13
ELSE
print *,'ICON_PDG_DTU: no particle found for ',IDPDG
ICON_PDG_SIB = 0
RETURN
ENDIF
END
SUBROUTINE PO_MSHELL(PA1,PA2,XM1,XM2,P1,P2)
C********************************************************************
C
C rescaling of momenta of two partons to put both
C on mass shell
C
C input: PA1,PA2 input momentum vectors
C XM1,2 desired masses of particles afterwards
C P1,P2 changed momentum vectors
C
C (taken from PHOJET 1.12, R.E. 08/98)
C
C********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
PARAMETER ( DEPS = 1.D-5 )
DIMENSION PA1(4),PA2(4),P1(4),P2(4)
C Lorentz transformation into system CMS
PX = PA1(1)+PA2(1)
PY = PA1(2)+PA2(2)
PZ = PA1(3)+PA2(3)
EE = PA1(4)+PA2(4)
XMS = EE**2-PX**2-PY**2-PZ**2
XMS = SQRT(XMS)
BGX = PX/XMS
BGY = PY/XMS
BGZ = PZ/XMS
GAM = EE/XMS
CALL PO_ALTRA(GAM,-BGX,-BGY,-BGZ,PA1(1),PA1(2),PA1(3),
& PA1(4),PTOT1,P1(1),P1(2),P1(3),P1(4))
C rotation angles
PTOT1 = MAX(DEPS,PTOT1)
COD= P1(3)/PTOT1
SID= SQRT((1.D0-COD)*(1.D0+COD))
COF=1.D0
SIF=0.D0
IF(PTOT1*SID.GT.1.D-5) THEN
COF=P1(1)/(SID*PTOT1)
SIF=P1(2)/(SID*PTOT1)
ANORF=SQRT(COF*COF+SIF*SIF)
COF=COF/ANORF
SIF=SIF/ANORF
ENDIF
C new CM momentum and energies (for masses XM1,XM2)
XM12 = XM1**2
XM22 = XM2**2
SS = XMS**2
PCMP = PO_XLAM(SS,XM12,XM22)/(2.D0*XMS)
EE1 = SQRT(XM12+PCMP**2)
EE2 = XMS-EE1
C back rotation
CALL PO_TRANS(0.D0,0.D0,PCMP,COD,SID,COF,SIF,XX,YY,ZZ)
CALL PO_ALTRA(GAM,BGX,BGY,BGZ,XX,YY,ZZ,EE1,
& PTOT1,P1(1),P1(2),P1(3),P1(4))
CALL PO_ALTRA(GAM,BGX,BGY,BGZ,-XX,-YY,-ZZ,EE2,
& PTOT2,P2(1),P2(2),P2(3),P2(4))
END
DOUBLE PRECISION FUNCTION PO_XLAM(X,Y,Z)
C**********************************************************************
C
C auxiliary function for two/three particle decay mode
C (standard LAMBDA**(1/2) function)
C
C (taken from PHOJET 1.12, R.E. 08/98)
C
C**********************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
YZ=Y-Z
XLAM=X*X-2.D0*X*(Y+Z)+YZ*YZ
IF(XLAM.LT.0.D0) XLAM=-XLAM
PO_XLAM=SQRT(XLAM)
END
SUBROUTINE INITIAL(L0)
c*******************************************************************
c initialization routine for setting parameters of resonances
c*******************************************************************
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
SAVE
COMMON /RES_PROP/ AMRES(9),SIG0(9),WIDTH(9),
+ NAMPRES(0:9)
COMMON /RES_PROPp/ AMRESp(9), BGAMMAp(9),WIDTHp(9),
+ RATIOJp(9),NAMPRESp(0:9)
COMMON /RES_PROPn/ AMRESn(9), BGAMMAn(9),WIDTHn(9),
+ RATIOJn(9),NAMPRESn(0:9)
COMMON /SO_MASS1/ AM(49), AM2(49)
CHARACTER NAMPRESp*6, NAMPRESn*6
CHARACTER NAMPRES*6
if (L0.eq.13) then
do i=1,9
SIG0(i) = 4.893089117D0/AM2(13)*RATIOJp(i)*BGAMMAp(i)
AMRES(i) = AMRESp(i)
WIDTH(i) = WIDTHp(i)
NAMPRES(i) = NAMPRESp(i)
enddo
endif
if (L0.eq.14) then
do i=1,9
SIG0(i) = 4.893089117D0/AM2(14)*RATIOJn(i)*BGAMMAn(i)
AMRES(i) = AMRESn(i)
WIDTH(i) = WIDTHn(i)
NAMPRES(i) = NAMPRESn(i)
enddo
endif
RETURN
END