5 * Revision 1.1.1.1 1995/10/24 10:19:56 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 02/07/94 17.22.04 by S.Giani
12 SUBROUTINE FEREVV ( NHAD, KP, KT, PM, EKM, TXX, TYY, TZZ, ATEMP,
14 #include "geant321/dblprc.inc"
15 #include "geant321/dimpar.inc"
16 #include "geant321/iounit.inc"
18 *----------------------------------------------------------------------*
20 * Ferevt90 by A. Ferrari *
22 * Last change on 15-aug-93 by Alfredo Ferrari, INFN - Milan *
24 * Ferevt calculates hadron nucleon collisions *
25 * including the Fermi momentum of the target: *
26 * now there are two entries, one for valence collisions (or for *
27 * sea collisions with one of the last two nucleons) and one *
28 * (fersea) for sea collisions. *
30 * Nhad = number of final hadrons *
31 * Kp and Kt are indices of the projectile and target nucleons *
32 * Pm = momentum of the projectile (for ferevv entry) *
33 * Ekm = kinetic energy of the projectile (for both entries) *
34 * Txx, Tyy, Tzz = direction cosines of the incident projectile, *
35 * THEY ARE CHANGED in the routine for sea intera- *
37 * Atemp, Ztemp = mass and atomic number of the residula nucleus *
38 * after the "use" of the Kt nucleon *
39 * Kprim = index of the real projectile (only for Fersea) *
40 * Eprim = energy of the real projectile after the emission of *
41 * the virtual meson (only for Fersea) *
42 * Pprim = momentum of the real projectile after the emission of *
43 * the virtual meson (only for Fersea) *
44 * Eprold= energy of the real projectile before the emission of *
45 * the virtual meson (only for Fersea) *
46 * Pprold= momentum of the real projectile before the emission of *
47 * the virtual meson (only for Fersea) *
49 *----------------------------------------------------------------------*
51 #include "geant321/balanc.inc"
52 #include "geant321/depnuc.inc"
53 #include "geant321/hadpar.inc"
54 #include "geant321/inpdat2.inc"
55 #include "geant321/nucdat.inc"
56 #include "geant321/parevt.inc"
57 #include "geant321/part2.inc"
58 #include "geant321/resnuc.inc"
59 COMMON /FKPRIN/ IPRI, INIT
60 LOGICAL LSEACL, LSMPAN
61 DIMENSION PTHRSH (NALLWP), IJNUCR (NALLWP)
62 COMMON /FKEVNT/ LNUCRI, LHADRI
63 LOGICAL LNUCRI, LHADRI
67 DATA PTHRSH / 16*5.D+00,2*2.5D+00,5.D+00,3*2.5D+00,8*5.D+00,
69 DATA IJNUCR / 16*1,2*0,1,3*0,8*1,9*0 /
78 IF ( AMPROJ .LT. 1.D+00 ) THEN
83 URMIN2 = ( AMPROJ + AMTAR )**2 + ( 1.2D+00 + DBLE (IVFLAG)
84 & * AFACT ) * ETHSEA * AMTAR
86 ENTRY FERSEA ( NHAD, KP, KT, EKM, TXX, TYY, TZZ, ATEMP, ZTEMP,
87 & KPRIM, EPRIM, PPRIM, EPROLD, PPROLD )
95 PSPENT = PPROLD - PPRIM
97 IF ( KP .EQ. 26 .AND. KT .EQ. 8 ) THEN
98 URMIN2 = ( AAM (13) + AAM (56) )**2 + 0.2D+00 * ETHSEA
100 ELSE IF ( KP .EQ. 23 .AND. KT .EQ. 1 ) THEN
101 URMIN2 = ( AAM (14) + AAM (53) )**2 + 0.2D+00 * ETHSEA
104 URMIN2 = ( AMPROJ + AMTAR )**2 + 1.2D+00 * ETHSEA * AMTAR
125 EKFER = EFER - AMNUCL (ITJ) + EBNDNG (ITJ)
127 PXFRM = PXFRM + PXNUC
128 PYFRM = PYFRM + PYNUC
129 PZFRM = PZFRM + PZNUC
131 PXCHCK = PXNUC + PM * TXX
132 PYCHCK = PYNUC + PM * TYY
133 PZCHCK = PZNUC + PM * TZZ
134 UMO = SQRT ( ECHCK**2 - PXCHCK**2 - PYCHCK**2 - PZCHCK**2 )
137 P2 = MAX ( FRNDM (1), FRNDM (2), FRNDM (3) )
138 P2 = PFRMMX (ITJ) * P2
140 AMTEMP = ATEMP * AMUC12
141 AMTMSQ = AMTEMP * AMTEMP
142 EKRECL = 0.5D+00 * P2SQ / AMTEMP * ( 1.D+00 - 0.25D+00 * P2SQ
145 CALL POLI (POLC, POLS)
146 CALL SFECFE (SFE , CFE )
153 PXFRM = PXFRM + PXNUC
154 PYFRM = PYFRM + PYNUC
155 PZFRM = PZFRM + PZNUC
156 EFER = SQRT ( AMNUSQ (ITJ) + PXNUC**2 + PYNUC**2 + PZNUC**2 )
157 FRSURV = ANOW / DBLE ( IBTAR )
158 IF ( .NOT. LSEACL .OR. FRSURV .LT. 0.66D+00 .OR. ATEMP .LT.
160 IATEMP = NINT (ATEMP)
161 IZTEMP = NINT (ZTEMP)
162 AMMRES = AMUAMU * ATEMP + 1.D-03 * FKENER ( ATEMP, ZTEMP )
163 AMMRE2 = AMMRES * AMMRES
164 EKRECL = SQRT ( P2SQ + AMMRE2 ) - AMMRES
166 ELEFT = ETTOT - EINTR - EUZ - ESPTOT - EFER + EKRECL
167 & + V0WELL (ITJ) + EBNDNG (ITJ)
168 PXLAST = PXTTOT - PXINTR - PUX - PSPTOT * TXX - PXNUC
169 PYLAST = PYTTOT - PYINTR - PUY - PSPTOT * TYY - PYNUC
170 PZLAST = PZTTOT - PZINTR - PUZ - PSPTOT * TZZ - PZNUC
171 PPLAS2 = PXLAST**2 + PYLAST**2 + PZLAST**2
173 DELEFT = AMMTAR - AMNTAR - ( DBLE (ICHTAR) - ZTEMP )
176 EELEFT = ELEFT + DELEFT
177 UMO2 = EELEFT**2 - PPLAS2
178 DELTU2 = AMMRE2 - UMO2
179 IF ( DELTU2 .GT. 0.D+00 ) THEN
182 DELTAE = 0.5D+00 * DELTU2 / EELEFT
183 IF ( IUMO .GT. 2 ) THEN
184 ELSE IF ( DELTAE .LT. 2.D+00 * EKREC0 ) THEN
185 EKRECL = EKRECL + DELTAE
186 ELEFT = ELEFT + DELTAE
189 EKRECL = EKRECL + EKREC0
190 ELEFT = ELEFT + EKREC0
191 EELEFT = ELEFT + DELEFT
192 UMO2 = EELEFT**2 - PPLAS2
193 DELTU2 = AMMRE2 - UMO2
194 PFDTPL = PXNUC * PXLAST + PYNUC * PYLAST
196 PPLAST = SQRT ( PPLAS2 )
197 DELTPR = 0.51D+00 * DELTU2 / ( PPLAST - EELEFT
198 & * PFDTPL / ( EFER * PPLAST ) )
199 DELTPR = SIGN ( MIN ( ABS ( DELTPR ), HLFHLF
200 & * P2 ), DELTPR ) / PPLAST
201 PXXINC = PXLAST * DELTPR
202 PYYINC = PYLAST * DELTPR
203 PZZINC = PZLAST * DELTPR
204 PXLAST = PXLAST - PXXINC
205 PYLAST = PYLAST - PYYINC
206 PZLAST = PZLAST - PZZINC
207 PXFRM = PXFRM + PXXINC
208 PYFRM = PYFRM + PYYINC
209 PZFRM = PZFRM + PZZINC
210 PXNUC = PXNUC + PXXINC
211 PYNUC = PYNUC + PYYINC
212 PZNUC = PZNUC + PZZINC
214 EFER = SQRT ( PXNUC**2 + PYNUC**2 +
215 & PZNUC**2 + AMNUSQ (ITJ) )
216 DELTAE = EFER0 - EFER
217 IF ( DELTAE .GT. 0.D+00 ) THEN
218 ELEFT = ELEFT + DELTAE
222 PPLAS2 = PXLAST**2 + PYLAST**2 + PZLAST**2
227 DELTAE = 0.5D+00 * DELTU2 / EELEFT
228 IF ( IUMO .GT. 3 ) THEN
229 WRITE ( LUNOUT, * )' Ferevv: valence call,',
230 & ' impossible to get',
231 & ' enough invariant mass for the residual',
232 & ' nucleus!!',IATEMP,IZTEMP,AMMRE2,UMO2,UMO,
234 WRITE ( LUNERR, * )' Ferevv: valence call,',
235 & ' impossible to get',
236 & ' enough invariant mass for the residual',
237 & ' nucleus!!',IATEMP,IZTEMP,AMMRE2,UMO2,UMO,
239 ELSE IF ( DELTAE .LT. 3.D+00 * EKREC0 ) THEN
240 EKRECL = EKRECL + DELTAE
241 ELEFT = ELEFT + DELTAE
244 EKRECL = EKRECL + 2.D+00 * EKREC0
245 ELEFT = ELEFT + 2.D+00 * EKREC0
246 EELEFT = ELEFT + DELEFT
247 UMO2 = EELEFT**2 - PPLAS2
248 DELTU2 = AMMRE2 - UMO2
249 PPDTPL = PM * ( PXLAST * TXX + PYLAST * TYY
251 PPLAST = SQRT ( PPLAS2 )
252 DELTPR = 0.51D+00 * DELTU2 / ( PPLAST - EELEFT
253 & * PPDTPL / ( ( EKM + AMPROJ ) * PPLAST
256 TMPPPL = 0.8D+00 * PPLAST
257 DELTPR = SIGN ( MIN ( ABS ( DELTPR ), TMPPM
258 & , TMPPPL ), DELTPR )
260 PXXINC = PXLAST * DELTPR
261 PYYINC = PYLAST * DELTPR
262 PZZINC = PZLAST * DELTPR
263 PXLAST = PXLAST - PXXINC
264 PYLAST = PYLAST - PYYINC
265 PZLAST = PZLAST - PZZINC
266 PXFRM = PXFRM + PXXINC
267 PYFRM = PYFRM + PYYINC
268 PZFRM = PZFRM + PZZINC
269 PXXINC = PM * TXX + PXXINC
270 PYYINC = PM * TYY + PYYINC
271 PZZINC = PM * TZZ + PZZINC
272 PM = SQRT ( PXXINC**2 + PYYINC**2
278 EKM = SQRT ( PM * PM + AMPROJ * AMPROJ )
280 DELTAE = DELTAE - EKM
281 ELEFT = ELEFT + DELTAE
283 PPLAS2 = PXLAST**2 + PYLAST**2 + PZLAST**2
285 ESPENT = EKM + AMPROJ
291 UMO = ( ESPENT + EFER - V0WELL (ITJ) - EKRECL
292 & - EBNDNG (ITJ) )**2
293 & - ( TXX * PSPENT + PXNUC )**2
294 & - ( TYY * PSPENT + PYNUC )**2
295 & - ( TZZ * PSPENT + PZNUC )**2
296 IF ( UMO .LT. URMIN2 ) THEN
297 WRITE ( LUNOUT, * )' Ferevv: impossible to get',
298 & ' enough invariant mass for interaction',
299 & IATEMP,IZTEMP,AMMRE2,UMO2,UMO
300 WRITE ( LUNERR, * )' Ferevv: impossible to get',
301 & ' enough invariant mass for interaction',
302 & IATEMP,IZTEMP,AMMRE2,UMO2,UMO
305 IF ( IUMO .GT. 0 .AND. .NOT. LSEACL .AND. DELTU2 .LT.
307 DELTAE = SQRT ( DELTU2 + EELEFT**2 )
309 DELTAE = DELTAE + 10.D+00 * ANGLGB * AMMRES
310 EKRECL = EKRECL + DELTAE
311 ELEFT = ELEFT + DELTAE
312 EELEFT = ELEFT + DELEFT
313 UMO2 = EELEFT**2 - PPLAS2
314 DELTU2 = AMMRE2 - UMO2
317 AMTEMP = ATEMP * AMUC12
318 AMTMSQ = AMTEMP * AMTEMP
319 EKRECL = 0.5D+00 * P2SQ / AMTEMP * ( 1.D+00 - 0.25D+00
323 EKFER = EFER - AMNUCL (ITJ)
325 AMPRI2 = EPRIM * EPRIM - PPRIM * PPRIM
326 PXCHCK = PXNUC + PPROLD * TXX
327 PYCHCK = PYNUC + PPROLD * TYY
328 PZCHCK = PZNUC + PPROLD * TZZ
329 P2CHCK = PXCHCK**2 + PYCHCK**2 + PZCHCK**2
330 ECHCK = EPROLD + EFER
331 UMO2 = ECHCK**2 - P2CHCK
332 IF ( UMO2 .LT. 0.D+00 ) THEN
334 WRITE (LUNERR,*)' FEREVV: SEA INT. UMO2 < 0 ',UMO2
338 RMIN2 = URMIN2 / UMO2
343 ETACM = SQRT ( ETAX**2 + ETAY**2 + ETAZ**2 )
347 CALL SFECFE ( SFE, CFE )
348 IF ( ABS (CZCMS) .GT. 1.D-04 ) THEN
349 CXXTR = - SFE * CZCMS
351 CZZTR = CXCMS * SFE - CYCMS * CFE
352 ELSE IF ( ABS (CYCMS) .GT. 1.D-04 ) THEN
354 CYYTR = CZCMS * SFE - CXCMS * CFE
355 CZZTR = - SFE * CYCMS
357 CXXTR = CYCMS * SFE - CZCMS * CFE
358 CYYTR = - SFE * CXCMS
364 PCMSMX = PPRIM - ETACM * ( EPRIM - ETACM * PPRIM / ( GAMCM
366 RMAX2 = 1.D+00 + AMPRI2 / UMO2 - 2.D+00 * ( EPRIM -
367 & ETACM * PCMSMX ) / ECHCK
368 IF ( RMAX2 .GT. RMIN2 ) THEN
375 PLONG2 = ( PPRIM - PTRANS ) * ( PPRIM + PTRANS )
376 PLONGI = SQRT ( PLONG2 )
377 PXLAST = PTRANS * CXXTR + PLONGI * CXCMS
378 PYLAST = PTRANS * CYYTR + PLONGI * CYCMS
379 PZLAST = PTRANS * CZZTR + PLONGI * CZCMS
380 PCMSLN = PLONGI - ETACM * ( EPRIM - ETACM * PLONGI /
381 & ( GAMCM + 1.D+00 ) )
382 RURM2 = 1.D+00 + AMPRI2 / UMO2 - 2.D+00 * ( EPRIM -
383 & ETACM * PCMSLN ) / ECHCK
387 IF ( RURM2 .LE. RMIN2 ) THEN
388 PTRANS = 0.5D+00 * PTRANS
389 WRITE ( LUNERR, * )' Ferevv: R2 < Rmin2 for Pt',
390 & RURM2, RMIN2, URMIN2
391 IF ( PTRANS .GT. ANGLGB ) GO TO 1220
393 PCMSX = PCMSLN * CXCMS + PTRANS * CXXTR
394 PCMSY = PCMSLN * CYCMS + PTRANS * CYYTR
395 PCMSZ = PCMSLN * CZCMS + PTRANS * CZZTR
396 ERCMS = 0.5D+00 * ( UMO2 * ( 1.D+00 + RURM2 ) - AMPRI2 )
398 ETAPCM = PCMSLN * ETACM
399 ECHCK = GAMCM * ERCMS - ETAPCM
400 PHELP = - ETAPCM / (GAMCM + 1.D+00) + ERCMS
401 PXCHCK = - PCMSX + ETAX * PHELP
402 PYCHCK = - PCMSY + ETAY * PHELP
403 PZCHCK = - PCMSZ + ETAZ * PHELP
404 ECHCK = ECHCK - V0WELL (ITJ) - EKRECL - EBNDNG (ITJ)
405 UMO = ECHCK**2 - PXCHCK**2 - PYCHCK**2
407 IF ( UMO .LT. 0.D+00 ) THEN
413 EM = EKM + AMPROJ - V0WELL (ITJ) - EKRECL - EBNDNG (ITJ)
415 PXCHCK = PXNUC + PM * TXX
416 PYCHCK = PYNUC + PM * TYY
417 PZCHCK = PZNUC + PM * TZZ
418 UMO = ECHCK**2 - PXCHCK**2 - PYCHCK**2
420 IF ( UMO .LT. 0.D+00 ) THEN
421 WRITE (LUNOUT,*)' *** Ferevv: Umo < 0 ',UMO
422 WRITE (LUNERR,*)' *** Ferevv: Umo < 0 ',UMO
429 EFRM = EFRM + EKFER - V0WELL (ITJ) - EKRECL
430 TVEUZ = TVEUZ + V0WELL (ITJ) - EKFER + EKRECL
433 EPROJX = HLFHLF * ( UMO2 - AMPROJ**2 - AMTAR**2 ) / AMTAR
434 IF ( EPROJX .LE. AMPROJ ) THEN
435 WRITE (LUNOUT,*)' Ferevv: Eprojx < Amproj after kin. sel. !',
436 & EPROJX, AMPROJ, LSEACL
437 WRITE (LUNERR,*)' Ferevv: Eprojx < Amproj after kin. sel. !',
438 & EPROJX, AMPROJ, LSEACL
439 PXFRM = PXFRM - PXNUC
440 PYFRM = PYFRM - PYNUC
441 PZFRM = PZFRM - PZNUC
442 EFRM = EFRM - EKFER + V0WELL (ITJ) + EKRECL
443 TVEUZ = TVEUZ - V0WELL (ITJ) + EKFER - EKRECL
444 IF ( LSEACL ) GO TO 50
449 PPROJX = SQRT ( ( EPROJX - AMPROJ ) * ( EPROJX + AMPROJ ) )
450 ETOTX = EPROJX + AMTAR
451 PTOSCA = PXCHCK * TXX + PYCHCK * TYY + PZCHCK * TZZ
452 PXTART = PXCHCK - PTOSCA * TXX
453 PYTART = PYCHCK - PTOSCA * TYY
454 PZTART = PZCHCK - PTOSCA * TZZ
455 PTRASQ = PXTART**2 + PYTART**2 + PZTART**2
456 AMTRSQ = AMTAR**2 + PTRASQ
457 UMOTR2 = UMO2 + PTRASQ
458 UMOTR = SQRT (UMOTR2)
459 PPARSQ = ECHCK**2 - UMOTR2
460 PPARTT = SQRT (PPARSQ)
461 GAMCMS = ECHCK / UMOTR
462 ETACMS = PPARTT / UMOTR
463 EPRCMS = HLFHLF * ( UMOTR2 + AMPROJ**2 - AMTRSQ ) / UMOTR
464 PPRCMS = SQRT ( ( EPRCMS - AMPROJ ) * ( EPRCMS + AMPROJ ) )
465 EPRLAB = GAMCMS * EPRCMS + ETACMS * PPRCMS
466 ETRLAB = ECHCK - EPRLAB
467 PPRLAB = SQRT ( ( EPRLAB - AMPROJ ) * ( EPRLAB + AMPROJ ) )
468 PXTARG = PXCHCK - PPRLAB * TXX
469 PYTARG = PYCHCK - PPRLAB * TYY
470 PZTARG = PZCHCK - PPRLAB * TZZ
475 PPHELP = ( BGX * TXX + BGY * TYY + BGZ * TZZ ) * PPRLAB
476 ETAPCM = EPRLAB - PPHELP / ( GAM + ONEONE )
477 PXPROJ = PPRLAB * TXX - BGX * ETAPCM
478 PYPROJ = PPRLAB * TYY - BGY * ETAPCM
479 PZPROJ = PPRLAB * TZZ - BGZ * ETAPCM
480 UUOLD = PXPROJ / PPROJX
481 VVOLD = PYPROJ / PPROJX
482 WWOLD = PZPROJ / PPROJX
483 SINT02 = UUOLD**2 + VVOLD**2
484 IF ( SINT02 .LE. ANGLSQ ) THEN
491 SINTH0 = SQRT (SINT02)
492 COSPH0 = UUOLD / SINTH0
493 SINPH0 = VVOLD / SINTH0
497 IF ( LSEACL .OR. .NOT. LDIFFR (KPTOIP(KP)) .OR. PLABS .LE. PTHDFF
501 IF ( RN1GSC .GE. ZERZER ) THEN
503 IF ( FRUUN(1) .LT. HLFHLF ) THEN
513 IF ( UMO * UMO .LT. URMIN2 ) THEN
514 IF ( URMIN2 - UMO2 .LT. 0.1D+00 * URMIN2 .AND. IIBAR (KP) .LT.
516 IF ( .NOT. LSEACL .AND. PLABS .GT. 2.D+00 ) GO TO 1550
517 WRITE ( LUNOUT,* )' Ferevv: Umo2 < Urmin2 !!',UMO*UMO,URMIN2,
519 WRITE ( LUNERR,* )' Ferevv: Umo2 < Urmin2 !!',UMO*UMO,URMIN2,
528 IBARH (1) = IIBAR (KT)
531 IF ( LSEACL .OR. IVFLAG .EQ. 0 ) THEN
541 IBARH (2) = IIBAR (NREH(2))
542 ICHH (2) = IICH (NREH(2))
543 ANH (2) = ANAME (NREH(2))
547 IF ( FRUUN(1) .LE. FRDIFF ) THEN
548 CALL DIFEVV ( NHAD, KP, KT, PLABS, ELABS, UMO )
550 ELSE IF ( .NOT. LSEACL .AND. PLABS .LT. DBLE(IJNUCR(KPTOIP(KP)))
551 & * 0.8D+00 * PTHRSH (KPTOIP(KP)) ) THEN
552 IF ( KP .EQ. 26 ) THEN
557 CALL HEVHIN ( NHAD, KPP, KT, PLABS, ELABS, UMO )
560 IF ( .NOT. LSEACL ) THEN
564 CALL HADEVV ( NHAD, KP, KT, PLABS, ELABS, UMO )
569 PZH (I) = WWOLD * PZH (I)
571 PLRX = PXH (I) * COSPH0 * WWOLD - PYH (I) * SINPH0
573 PLRY = PXH (I) * SINPH0 * WWOLD + PYH (I) * COSPH0
575 PLRZ = - PXH (I) * SINTH0 + PZH (I) * WWOLD
580 CALL ALTRA ( GAM, BGX, BGY, BGZ, PXH(I), PYH(I), PZH(I),
581 & HEPH(I), PLR, PLRX, PLRY, PLRZ, ELR )