Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pyspli.f
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file pyspli.f
1 
2 C*********************************************************************
3 
4 C...PYSPLI
5 C...Splits a hadron remnant into two (partons or hadron + parton)
6 C...in case it is more complicated than just a quark or a diquark.
7 
8  SUBROUTINE pyspli(KF,KFLIN,KFLCH,KFLSP)
9 
10 C...Double precision and integer declarations.
11  IMPLICIT DOUBLE PRECISION(a-h, o-z)
12  IMPLICIT INTEGER(i-n)
13  INTEGER pyk,pychge,pycomp
14 C...Commonblocks. PYDAT1 temporary
15  common/pypars/mstp(200),parp(200),msti(200),pari(200)
16  common/pyint1/mint(400),vint(400)
17  common/pydat1/mstu(200),paru(200),mstj(200),parj(200)
18  SAVE /pypars/,/pyint1/,/pydat1/
19 C...Local array.
20  dimension kfl(3)
21 
22 C...Preliminaries. Parton composition.
23  kfa=iabs(kf)
24  kfs=isign(1,kf)
25  kfl(1)=mod(kfa/1000,10)
26  kfl(2)=mod(kfa/100,10)
27  kfl(3)=mod(kfa/10,10)
28  IF(kfa.EQ.22.AND.mint(109).EQ.2) THEN
29  kfl(2)=int(1.5d0+pyr(0))
30  IF(mint(105).EQ.333) kfl(2)=3
31  IF(mint(105).EQ.443) kfl(2)=4
32  kfl(3)=kfl(2)
33  ELSEIF((kfa.EQ.111.OR.kfa.EQ.113).AND.pyr(0).GT.0.5d0) THEN
34  kfl(2)=2
35  kfl(3)=2
36  ELSEIF(kfa.EQ.223.AND.pyr(0).GT.0.5d0) THEN
37  kfl(2)=1
38  kfl(3)=1
39  ELSEIF((kfa.EQ.130.OR.kfa.EQ.310).AND.pyr(0).GT.0.5d0) THEN
40  kfl(2)=mod(kfa/10,10)
41  kfl(3)=mod(kfa/100,10)
42  ENDIF
43  IF(kflin.NE.21.AND.kflin.NE.22.AND.kflin.NE.23) THEN
44  kflr=kflin*kfs
45  ELSE
46  kflr=kflin
47  ENDIF
48  kflch=0
49 
50 C...Subdivide lepton.
51  IF(kfa.GE.11.AND.kfa.LE.18) THEN
52  IF(kflr.EQ.kfa) THEN
53  kflsp=kfs*22
54  ELSEIF(kflr.EQ.22) THEN
55  kflsp=kfa
56  ELSEIF(kflr.EQ.-24.AND.mod(kfa,2).EQ.1) THEN
57  kflsp=kfa+1
58  ELSEIF(kflr.EQ.24.AND.mod(kfa,2).EQ.0) THEN
59  kflsp=kfa-1
60  ELSEIF(kflr.EQ.21) THEN
61  kflsp=kfa
62  kflch=kfs*21
63  ELSE
64  kflsp=kfa
65  kflch=-kflr
66  ENDIF
67 
68 C...Subdivide photon.
69  ELSEIF(kfa.EQ.22.AND.mint(109).NE.2) THEN
70  IF(kflr.NE.21) THEN
71  kflsp=-kflr
72  ELSE
73  ragr=0.75d0*pyr(0)
74  kflsp=1
75  IF(ragr.GT.0.125d0) kflsp=2
76  IF(ragr.GT.0.625d0) kflsp=3
77  IF(pyr(0).GT.0.5d0) kflsp=-kflsp
78  kflch=-kflsp
79  ENDIF
80 
81 C...Subdivide Reggeon or Pomeron.
82  ELSEIF(kfa.EQ.110.OR.kfa.EQ.990) THEN
83  IF(kflin.EQ.21) THEN
84  kflsp=kfs*21
85  ELSE
86  kflsp=-kflin
87  ENDIF
88 
89 C...Subdivide meson.
90  ELSEIF(kfl(1).EQ.0) THEN
91  kfl(2)=kfl(2)*(-1)**kfl(2)
92  kfl(3)=-kfl(3)*(-1)**iabs(kfl(2))
93  IF(kflr.EQ.kfl(2)) THEN
94  kflsp=kfl(3)
95  ELSEIF(kflr.EQ.kfl(3)) THEN
96  kflsp=kfl(2)
97  ELSEIF(kflr.EQ.21.AND.pyr(0).GT.0.5d0) THEN
98  kflsp=kfl(2)
99  kflch=kfl(3)
100  ELSEIF(kflr.EQ.21) THEN
101  kflsp=kfl(3)
102  kflch=kfl(2)
103  ELSEIF(kflr*kfl(2).GT.0) THEN
104  ntry=0
105  100 ntry=ntry+1
106  CALL pykfdi(-kflr,kfl(2),kfdump,kflch)
107  IF(kflch.EQ.0.AND.ntry.LT.100) THEN
108  goto 100
109  ELSEIF(kflch.EQ.0) THEN
110  CALL pyerrm(14,'(PYSPLI:) caught in infinite loop')
111  mint(51)=1
112  RETURN
113  ENDIF
114  kflsp=kfl(3)
115  ELSE
116  ntry=0
117  110 ntry=ntry+1
118  CALL pykfdi(-kflr,kfl(3),kfdump,kflch)
119  IF(kflch.EQ.0.AND.ntry.LT.100) THEN
120  goto 110
121  ELSEIF(kflch.EQ.0) THEN
122  CALL pyerrm(14,'(PYSPLI:) caught in infinite loop')
123  mint(51)=1
124  RETURN
125  ENDIF
126  kflsp=kfl(2)
127  ENDIF
128 
129 C...Special case for extracting photon from baryon without splitting
130 C...the latter. (Currently only used by external programs.)
131  ELSEIF(kflin.EQ.22.AND.mstp(98).EQ.1) then
132  kflsp=kfa
133  kflch=0
134 
135 C...Subdivide baryon.
136  ELSE
137  nagr=0
138  DO 120 j=1,3
139  IF(kflr.EQ.kfl(j)) nagr=nagr+1
140  120 CONTINUE
141  IF(nagr.GE.1) THEN
142  ragr=0.00001d0+(nagr-0.00002d0)*pyr(0)
143  iagr=0
144  DO 130 j=1,3
145  IF(kflr.EQ.kfl(j)) ragr=ragr-1d0
146  IF(iagr.EQ.0.AND.ragr.LE.0d0) iagr=j
147  130 CONTINUE
148  ELSE
149  iagr=1.00001d0+2.99998d0*pyr(0)
150  ENDIF
151  id1=1
152  IF(iagr.EQ.1) id1=2
153  IF(iagr.EQ.1.AND.kfl(3).GT.kfl(2)) id1=3
154  id2=6-iagr-id1
155  ksp=3
156  IF(mod(kfa,10).EQ.2.AND.kfl(1).EQ.kfl(2)) THEN
157  IF(iagr.NE.3.AND.pyr(0).GT.0.25d0) ksp=1
158  ELSEIF(mod(kfa,10).EQ.2.AND.kfl(2).GE.kfl(3)) THEN
159  IF(iagr.NE.1.AND.pyr(0).GT.0.25d0) ksp=1
160  ELSEIF(mod(kfa,10).EQ.2) THEN
161  IF(iagr.EQ.1) ksp=1
162  IF(iagr.NE.1.AND.pyr(0).GT.0.75d0) ksp=1
163  ENDIF
164  kflsp=1000*kfl(id1)+100*kfl(id2)+ksp
165  IF(kflr.EQ.21) THEN
166  kflch=kfl(iagr)
167  ELSEIF(nagr.EQ.0.AND.kflr.GT.0) THEN
168  ntry=0
169  140 ntry=ntry+1
170  CALL pykfdi(-kflr,kfl(iagr),kfdump,kflch)
171  IF(kflch.EQ.0.AND.ntry.LT.100) THEN
172  goto 140
173  ELSEIF(kflch.EQ.0) THEN
174  CALL pyerrm(14,'(PYSPLI:) caught in infinite loop')
175  mint(51)=1
176  RETURN
177  ENDIF
178  ELSEIF(nagr.EQ.0) THEN
179  ntry=0
180  150 ntry=ntry+1
181  CALL pykfdi(10000*kfl(id1)+kflsp,-kflr,kfdump,kflch)
182  IF(kflch.EQ.0.AND.ntry.LT.100) THEN
183  goto 150
184  ELSEIF(kflch.EQ.0) THEN
185  CALL pyerrm(14,'(PYSPLI:) caught in infinite loop')
186  mint(51)=1
187  RETURN
188  ENDIF
189  kflsp=kfl(iagr)
190  ENDIF
191  ENDIF
192 
193 C...Add on correct sign for result.
194  kflch=kflch*kfs
195  kflsp=kflsp*kfs
196 
197  RETURN
198  END