2 C*********************************************************************
4 SUBROUTINE PYKMAP(IVAR,MVAR,VVAR)
6 C...Maps a uniform distribution into a distribution of a kinematical
7 C...variable according to one of the possibilities allowed. It is
8 C...assumed that kinematical limits have been set by a PYKLIM call.
9 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
11 COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
12 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13 COMMON/PYINT1/MINT(400),VINT(400)
14 COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
15 SAVE /LUDAT1/,/LUDAT2/
16 SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
18 C...Convert VVAR to tau variable.
24 IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
27 ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
31 IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2.OR.ISTSB.EQ.6))
34 ELSEIF(MVAR.EQ.1) THEN
35 TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
36 ELSEIF(MVAR.EQ.2) THEN
37 TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
38 ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
39 RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
40 TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
41 ELSEIF(MVAR.EQ.4.OR.MVAR.EQ.6) THEN
42 AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
43 ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
44 TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
46 AUPP=LOG(MAX(2E-6,1.-TAUMAX))
47 ALOW=LOG(MAX(2E-6,1.-TAUMIN))
48 TAU=1.-EXP(AUPP+VVAR*(ALOW-AUPP))
50 VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
52 C...Convert VVAR to y* variable.
53 ELSEIF(IVAR.EQ.2) THEN
57 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
58 IF(MINT(47).EQ.1) THEN
60 ELSEIF(MINT(47).EQ.2) THEN
62 ELSEIF(MINT(47).EQ.3) THEN
64 ELSEIF(MVAR.EQ.1) THEN
65 YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
66 ELSEIF(MVAR.EQ.2) THEN
67 YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1.-VVAR)
68 ELSEIF(MVAR.EQ.3) THEN
69 AUPP=ATAN(EXP(YSTMAX))
70 ALOW=ATAN(EXP(YSTMIN))
71 YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
72 ELSEIF(MVAR.EQ.4) THEN
74 AUPP=LOG(MAX(1E-6,EXP(YST0-YSTMIN)-1.))
75 ALOW=LOG(MAX(1E-6,EXP(YST0-YSTMAX)-1.))
76 YST=YST0-LOG(1.+EXP(ALOW+VVAR*(AUPP-ALOW)))
79 AUPP=LOG(MAX(1E-6,EXP(YST0+YSTMIN)-1.))
80 ALOW=LOG(MAX(1E-6,EXP(YST0+YSTMAX)-1.))
81 YST=LOG(1.+EXP(AUPP+VVAR*(ALOW-AUPP)))-YST0
83 VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
85 C...Convert VVAR to cos(theta-hat) variable.
86 ELSEIF(IVAR.EQ.3) THEN
87 RM34=MAX(1E-20,2.*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2)
89 IF(2.*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001) RM34=MAX(RM34,
90 & 2.*VINT(71)**2/(VINT(21)*VINT(2)))
98 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
99 VCTN=VVAR*(ANEG+APOS)/ANEG
100 CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
102 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
103 CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
105 ELSEIF(MVAR.EQ.2) THEN
106 RMNMIN=MAX(RM34,RSQM-CTNMIN)
107 RMNMAX=MAX(RM34,RSQM-CTNMAX)
108 RMPMIN=MAX(RM34,RSQM-CTPMIN)
109 RMPMAX=MAX(RM34,RSQM-CTPMAX)
110 ANEG=LOG(RMNMIN/RMNMAX)
111 APOS=LOG(RMPMIN/RMPMAX)
112 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
113 VCTN=VVAR*(ANEG+APOS)/ANEG
114 CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
116 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
117 CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
119 ELSEIF(MVAR.EQ.3) THEN
120 RMNMIN=MAX(RM34,RSQM+CTNMIN)
121 RMNMAX=MAX(RM34,RSQM+CTNMAX)
122 RMPMIN=MAX(RM34,RSQM+CTPMIN)
123 RMPMAX=MAX(RM34,RSQM+CTPMAX)
124 ANEG=LOG(RMNMAX/RMNMIN)
125 APOS=LOG(RMPMAX/RMPMIN)
126 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
127 VCTN=VVAR*(ANEG+APOS)/ANEG
128 CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
130 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
131 CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
133 ELSEIF(MVAR.EQ.4) THEN
134 RMNMIN=MAX(RM34,RSQM-CTNMIN)
135 RMNMAX=MAX(RM34,RSQM-CTNMAX)
136 RMPMIN=MAX(RM34,RSQM-CTPMIN)
137 RMPMAX=MAX(RM34,RSQM-CTPMAX)
138 ANEG=1./RMNMAX-1./RMNMIN
139 APOS=1./RMPMAX-1./RMPMIN
140 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
141 VCTN=VVAR*(ANEG+APOS)/ANEG
142 CTH=RSQM-1./(1./RMNMIN+ANEG*VCTN)
144 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
145 CTH=RSQM-1./(1./RMPMIN+APOS*VCTP)
147 ELSEIF(MVAR.EQ.5) THEN
148 RMNMIN=MAX(RM34,RSQM+CTNMIN)
149 RMNMAX=MAX(RM34,RSQM+CTNMAX)
150 RMPMIN=MAX(RM34,RSQM+CTPMIN)
151 RMPMAX=MAX(RM34,RSQM+CTPMAX)
152 ANEG=1./RMNMIN-1./RMNMAX
153 APOS=1./RMPMIN-1./RMPMAX
154 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
155 VCTN=VVAR*(ANEG+APOS)/ANEG
156 CTH=1./(1./RMNMIN-ANEG*VCTN)-RSQM
158 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
159 CTH=1./(1./RMPMIN-APOS*VCTP)-RSQM
162 IF(CTH.LT.0.) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
163 IF(CTH.GT.0.) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
166 C...Convert VVAR to tau' variable.
167 ELSEIF(IVAR.EQ.4) THEN
171 IF(MINT(47).EQ.1) THEN
173 ELSEIF(MVAR.EQ.1) THEN
174 TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
175 ELSEIF(MVAR.EQ.2) THEN
176 AUPP=(1.-TAU/TAUPMX)**4
177 ALOW=(1.-TAU/TAUPMN)**4
178 TAUP=TAU/MAX(1E-7,1.-(ALOW+(AUPP-ALOW)*VVAR)**0.25)
180 AUPP=LOG(MAX(2E-6,1.-TAUPMX))
181 ALOW=LOG(MAX(2E-6,1.-TAUPMN))
182 TAUP=1.-EXP(AUPP+VVAR*(ALOW-AUPP))
184 VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
186 C...Selection of extra variables needed in 2 -> 3 process:
187 C...pT1, pT2, phi1, phi2, y3 for three outgoing particles.
188 C...Since no options are available, the functions of PYKLIM
189 C...and PYKMAP are joint for these choices.
190 ELSEIF(IVAR.EQ.5) THEN
192 C...Read out total energy and particle masses.
195 IF(ISUB.EQ.123.OR.ISUB.EQ.124.OR.ISUB.EQ.173.OR.ISUB.EQ.174
196 & .OR.ISUB.EQ.178.OR.ISUB.EQ.179) MPTPK=2
201 PM3=SQRT(VINT(21))*VINT(1)
202 IF(PM1+PM2+PM3.GT.0.9999*SHPR) THEN
209 C...Specify coefficients of pT choice; upper and lower limits.
218 PTSMX1=((SHP-PM1**2-(PM2+PM3)**2)**2-(2.*PM1*(PM2+PM3))**2)/
220 IF(CKIN(52).GT.0.) PTSMX1=MIN(PTSMX1,CKIN(52)**2)
222 PTSMX2=((SHP-PM2**2-(PM1+PM3)**2)**2-(2.*PM2*(PM1+PM3))**2)/
224 IF(CKIN(54).GT.0.) PTSMX2=MIN(PTSMX2,CKIN(54)**2)
227 C...Select transverse momenta according to
228 C...dp_T^2 * (a + b/(M^2 + p_T^2) + c/(M^2 + p_T^2)^2).
231 IF(HMX.LT.1.0001*HMN) THEN
238 PTS1=PTSMN1+RLU(0)*HDE
239 ELSEIF(RPT.LT.HWT1+HWT2) THEN
240 PTS1=MAX(PTSMN1,HMN*(HMX/HMN)**RLU(0)-PMRS1)
242 PTS1=MAX(PTSMN1,HMN*HMX/(HMN+RLU(0)*HDE)-PMRS1)
244 WTPTS1=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS1+PTS1))+
245 & HWT3*HMN*HMX/(PMRS1+PTS1)**2)
248 IF(HMX.LT.1.0001*HMN) THEN
255 PTS2=PTSMN2+RLU(0)*HDE
256 ELSEIF(RPT.LT.HWT1+HWT2) THEN
257 PTS2=MAX(PTSMN2,HMN*(HMX/HMN)**RLU(0)-PMRS2)
259 PTS2=MAX(PTSMN2,HMN*HMX/(HMN+RLU(0)*HDE)-PMRS2)
261 WTPTS2=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS2+PTS2))+
262 & HWT3*HMN*HMX/(PMRS2+PTS2)**2)
264 C...Select azimuthal angles and check pT choice.
268 PTS3=MAX(0.,PTS1+PTS2+2.*SQRT(PTS1*PTS2)*COS(PHIR))
269 IF(PTS3.LT.CKIN(55)**2.OR.(CKIN(56).GT.0..AND.PTS3.GT.
275 C...Calculate transverse masses and check phase space not closed.
283 IF(PMT1+PMT2+PMT3.GT.0.9999*SHPR) THEN
288 C...Select rapidity for particle 3 and check phase space not closed.
289 Y3MAX=LOG((SHP+PMS3-PM12+SQRT(MAX(0.,(SHP-PMS3-PM12)**2-
290 & 4.*PMS3*PM12)))/(2.*SHPR*PMT3))
291 IF(Y3MAX.LT.1E-6) THEN
295 Y3=(2.*RLU(0)-1.)*0.999999*Y3MAX
299 C...Find momentum transfers in two mirror solutions (in 1-2 frame).
302 PMS12=PE12**2-PZ12**2
303 SQL12=SQRT(MAX(0.,(PMS12-PMS1-PMS2)**2-4.*PMS1*PMS2))
304 IF(SQL12.LT.1E-6*SHP) THEN
310 TFAC=-SHPR/(2.*PMS12)
311 T1P=TFAC*(PE12-PZ12)*(PMM1-SQL12)
312 T1N=TFAC*(PE12-PZ12)*(PMM1+SQL12)
313 T2P=TFAC*(PE12+PZ12)*(PMM2-SQL12)
314 T2N=TFAC*(PE12+PZ12)*(PMM2+SQL12)
316 C...Construct relative mirror weights and make choice.
321 WTPU=1./((T1P-PMRS1)*(T2P-PMRS2))**2
322 WTNU=1./((T1N-PMRS1)*(T2N-PMRS2))**2
327 IF(WTN.GT.RLU(0)) EPS=-1.
329 C...Store result of variable choice and associated weights.
348 VINT(217)=-0.5*TFAC*(PE12-PZ12)*(PMM2+EPS*SQL12)
349 VINT(218)=-0.5*TFAC*(PE12+PZ12)*(PMM1+EPS*SQL12)
350 VINT(219)=0.5*(PMS12-PTS3)