Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pyk.f
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file pyk.f
1 
2 C*********************************************************************
3 
4 C...PYK
5 C...Provides various integer-valued event related data.
6 
7  FUNCTION pyk(I,J)
8 
9 C...Double precision and integer declarations.
10  IMPLICIT DOUBLE PRECISION(a-h, o-z)
11  IMPLICIT INTEGER(i-n)
12  INTEGER pyk,pychge,pycomp
13 C...Commonblocks.
14  common/pyjets/n,npad,k(4000,5),p(4000,5),v(4000,5)
15  common/pydat1/mstu(200),paru(200),mstj(200),parj(200)
16  common/pydat2/kchg(500,4),pmas(500,4),parf(2000),vckm(4,4)
17  SAVE /pyjets/,/pydat1/,/pydat2/
18 
19 C...Default value. For I=0 number of entries, number of stable entries
20 C...or 3 times total charge.
21  pyk=0
22  IF(i.LT.0.OR.i.GT.mstu(4).OR.j.LE.0) THEN
23  ELSEIF(i.EQ.0.AND.j.EQ.1) THEN
24  pyk=n
25  ELSEIF(i.EQ.0.AND.(j.EQ.2.OR.j.EQ.6)) THEN
26  DO 100 i1=1,n
27  IF(j.EQ.2.AND.k(i1,1).GE.1.AND.k(i1,1).LE.10) pyk=pyk+1
28  IF(j.EQ.6.AND.k(i1,1).GE.1.AND.k(i1,1).LE.10) pyk=pyk+
29  & pychge(k(i1,2))
30  100 CONTINUE
31  ELSEIF(i.EQ.0) THEN
32 
33 C...For I > 0 direct readout of K matrix or charge.
34  ELSEIF(j.LE.5) THEN
35  pyk=k(i,j)
36  ELSEIF(j.EQ.6) THEN
37  pyk=pychge(k(i,2))
38 
39 C...Status (existing/fragmented/decayed), parton/hadron separation.
40  ELSEIF(j.LE.8) THEN
41  IF(k(i,1).GE.1.AND.k(i,1).LE.10) pyk=1
42  IF(j.EQ.8) pyk=pyk*k(i,2)
43  ELSEIF(j.LE.12) THEN
44  kfa=iabs(k(i,2))
45  kc=pycomp(kfa)
46  kq=0
47  IF(kc.NE.0) kq=kchg(kc,2)
48  IF(j.EQ.9.AND.kc.NE.0.AND.kq.NE.0) pyk=k(i,2)
49  IF(j.EQ.10.AND.kc.NE.0.AND.kq.EQ.0) pyk=k(i,2)
50  IF(j.EQ.11) pyk=kc
51  IF(j.EQ.12) pyk=kq*isign(1,k(i,2))
52 
53 C...Heaviest flavour in hadron/diquark.
54  ELSEIF(j.EQ.13) THEN
55  kfa=iabs(k(i,2))
56  pyk=mod(kfa/100,10)*(-1)**mod(kfa/100,10)
57  IF(kfa.LT.10) pyk=kfa
58  IF(mod(kfa/1000,10).NE.0) pyk=mod(kfa/1000,10)
59  pyk=pyk*isign(1,k(i,2))
60 
61 C...Particle history: generation, ancestor, rank.
62  ELSEIF(j.LE.15) THEN
63  i2=i
64  i1=i
65  110 pyk=pyk+1
66  i2=i1
67  i1=k(i1,3)
68  IF(i1.GT.0) THEN
69  IF(k(i1,1).GT.0.AND.k(i1,1).LE.20) goto 110
70  ENDIF
71  IF(j.EQ.15) pyk=i2
72  ELSEIF(j.EQ.16) THEN
73  kfa=iabs(k(i,2))
74  IF(k(i,1).LE.20.AND.((kfa.GE.11.AND.kfa.LE.20).OR.kfa.EQ.22.OR.
75  & (kfa.GT.100.AND.mod(kfa/10,10).NE.0))) THEN
76  i1=i
77  120 i2=i1
78  i1=k(i1,3)
79  IF(i1.GT.0) THEN
80  kfam=iabs(k(i1,2))
81  ilp=1
82  IF(kfam.NE.0.AND.kfam.LE.10) ilp=0
83  IF(kfam.EQ.21.OR.kfam.EQ.91.OR.kfam.EQ.92.OR.kfam.EQ.93)
84  & ilp=0
85  IF(kfam.GT.100.AND.mod(kfam/10,10).EQ.0) ilp=0
86  IF(ilp.EQ.1) goto 120
87  ENDIF
88  IF(k(i1,1).EQ.12) THEN
89  DO 130 i3=i1+1,i2
90  IF(k(i3,3).EQ.k(i2,3).AND.k(i3,2).NE.91.AND.k(i3,2).NE.92
91  & .AND.k(i3,2).NE.93) pyk=pyk+1
92  130 CONTINUE
93  ELSE
94  i3=i2
95  140 pyk=pyk+1
96  i3=i3+1
97  IF(i3.LT.n.AND.k(i3,3).EQ.k(i2,3)) goto 140
98  ENDIF
99  ENDIF
100 
101 C...Particle coming from collapsing jet system or not.
102  ELSEIF(j.EQ.17) THEN
103  i1=i
104  150 pyk=pyk+1
105  i3=i1
106  i1=k(i1,3)
107  i0=max(1,i1)
108  kc=pycomp(k(i0,2))
109  IF(i1.EQ.0.OR.k(i0,1).LE.0.OR.k(i0,1).GT.20.OR.kc.EQ.0) THEN
110  IF(pyk.EQ.1) pyk=-1
111  IF(pyk.GT.1) pyk=0
112  RETURN
113  ENDIF
114  IF(kchg(kc,2).EQ.0) goto 150
115  IF(k(i1,1).NE.12) pyk=0
116  IF(k(i1,1).NE.12) RETURN
117  i2=i1
118  160 i2=i2+1
119  IF(i2.LT.n.AND.k(i2,1).NE.11) goto 160
120  k3m=k(i3-1,3)
121  IF(k3m.GE.i1.AND.k3m.LE.i2) pyk=0
122  k3p=k(i3+1,3)
123  IF(i3.LT.n.AND.k3p.GE.i1.AND.k3p.LE.i2) pyk=0
124 
125 C...Number of decay products. Colour flow.
126  ELSEIF(j.EQ.18) THEN
127  IF(k(i,1).EQ.11.OR.k(i,1).EQ.12) pyk=max(0,k(i,5)-k(i,4)+1)
128  IF(k(i,4).EQ.0.OR.k(i,5).EQ.0) pyk=0
129  ELSEIF(j.LE.22) THEN
130  IF(k(i,1).NE.3.AND.k(i,1).NE.13.AND.k(i,1).NE.14) RETURN
131  IF(j.EQ.19) pyk=mod(k(i,4)/mstu(5),mstu(5))
132  IF(j.EQ.20) pyk=mod(k(i,5)/mstu(5),mstu(5))
133  IF(j.EQ.21) pyk=mod(k(i,4),mstu(5))
134  IF(j.EQ.22) pyk=mod(k(i,5),mstu(5))
135  ELSE
136  ENDIF
137 
138  RETURN
139  END