5 * Revision 1.1.1.1 1999/05/18 15:55:22 fca
8 * Revision 1.2 1997/10/17 10:00:03 mclareni
9 * Remove SAVE statement for NT
11 * Revision 1.1.1.1 1995/10/24 10:22:00 cernlib
15 #include "geant321/pilot.h"
16 *CMZ : 3.21/02 29/03/94 15.41.45 by S.Giani
21 *=== bimsel ===========================================================*
23 SUBROUTINE BIMSEL ( JPROJ, TXX, TYY, TZZ, LBCHCK )
25 #include "geant321/dblprc.inc"
26 #include "geant321/dimpar.inc"
27 #include "geant321/iounit.inc"
29 *----------------------------------------------------------------------*
30 *----------------------------------------------------------------------*
32 #include "geant321/balanc.inc"
33 #include "geant321/eva0.inc"
34 #include "geant321/nucdat.inc"
35 #include "geant321/nucgeo.inc"
36 #include "geant321/part.inc"
37 #include "geant321/parevt.inc"
38 #include "geant321/resnuc.inc"
40 PARAMETER ( FEFFEC = 1.518066780142162 D+00 )
41 PARAMETER ( BETMAX = 0.4 D+00 )
45 LOGICAL LBCHCK, LFERMI, LLMDBR
47 SAVE ABTAR , ZZTAR , SIGMP0, SIGMN0,
48 & AMNHLP, RHOBIM, RPRONU, RADPRP, RADPRN, DSKRED, RHRUSF,
49 & AUSFL , ZUSFL , BNDSAV, RADHLP, BFCHLP, BIMCLM, PRCOLP,
50 & PRCOLN, IBTOLD, ICTOLD, KPROJ , NTRIAL, ITFRMI
51 SAVE SBHAL0, SBSKI0, SBCEN0, SBCEN1, SBSKI1, SBHAL1
55 DATA IBTOLD, ICTOLD / 2*0 /
61 BEPROJ = PNUCCO / ( EKECON + AM (KPROJ) )
67 IF ( KPROJ .EQ. 1 .OR. KPROJ .EQ. 8 ) THEN
68 IPWELL = 1 + KPROJ / 8
70 BNDNUC = BNENRG (IPWELL)
73 IF ( IBAR (KPROJ) .EQ. 0 ) THEN
74 IF ( KPROJ .LE. 11 ) THEN
87 IF ( IBAR (KPROJ) .NE. 0 ) THEN
89 ELSE IF ( KPROJ .NE. 7 ) THEN
90 RPRONU = 0.8164965809277260D+00
98 CALL SIGFER ( KPTOIP (KPROJ), EKESIG, PPRSIG, LFERMI )
99 PRCOLP = ZUSFL / AUSFL * SIGMAP
100 PRCOLN = ( AUSFL - ZUSFL ) / AUSFL * SIGMAN
101 SIGMAA = PRCOLP + PRCOLN
102 PRCOLP = PRCOLP / SIGMAA
103 PRCOLN = 1.D+00 - PRCOLP
105 IF ( RPRONU .GT. ANGLGB ) THEN
109 PDEBRO = MAX ( PNUCCO, TMP102 )
110 ALMBAR = PLABRC / PDEBRO
111 DEBRLM = 0.5D+00 * ALMBAR
112 RADCOR = SQRT ( (RPRONU * RMSPRO)**2 + ALMBAR**2 )
113 & / ( RMSPRO * RPRONU )
115 PDEBRO = ( EKECON + BNDNUC ) * ( EKECON + BNDNUC + 2.D+00
121 RADCOR = SQRT ( (RPRONU * RMSPRO)**2 + PLABRC**2 / PDEBRO
122 & ) / ( RMSPRO * RPRONU )
130 RADPRO = MIN ( TWOTWO * RMSPRO * RPRONU * RADCOR, SKGT16 )
133 IF ( IBTAR .NE. IBTOLD .OR. ICHTAR .NE. ICTOLD ) THEN
138 AR1O3 = RMASS (IBTAR)
139 AMNHLP = 0.5D+00 * ( AMNUCL (1) + AMNUCL (2) )
140 HKAP = ABTAR**2 / ( ZZTAR**2 + ( ABTAR - ZZTAR )**2 )
141 HHLP (1) = ( HKAP * ZZTAR )**0.3333333333333333D+00 / AR1O3
142 HHLP (2) = ( HKAP * ( ABTAR - ZZTAR ) )
143 & **0.3333333333333333D+00 / AR1O3
144 RHOCEN = RHOTAB (IBTAR)
145 ALPHAL = ALPTAB (IBTAR)
146 RADIU0 = RADTAB (IBTAR)
147 SKINDP = SKITAB (IBTAR)
148 HALODP = HALTAB (IBTAR)
149 RADIU1 = RADIU0 + SKINDP
150 RADTOT = RADIU1 + HALODP
151 RHOCOR = ONEMNS * RHOCEN
152 RHOSKN = ALPHAL * RHOCEN
153 PFRCEN (1) = HHLP (1) * PFRTAB (IBTAR)
154 PFRCEN (2) = HHLP (2) * PFRTAB (IBTAR)
155 RHOAVE = RHATAB (IBTAR)
156 PFRAVE = PFATAB (IBTAR)
157 EKFAVE = EKATAB (IBTAR)
158 OMALHL = 1.D+00 - ALPHAL
159 RAD1O2 = RADIU0 + 0.5D+00 * SKINDP / OMALHL
160 SKNEFF = SKINDP / OMALHL
161 RADSKN = RADIU0 + SKNEFF
162 EKFCEN (1) = SQRT ( AMNUSQ (1) + PFRCEN (1)**2 ) - AMNUCL (1)
163 EKFCEN (2) = SQRT ( AMNUSQ (2) + PFRCEN (2)**2 ) - AMNUCL (2)
164 IF ( PFRCEN (1) .GT. PFRCEN (2) ) THEN
169 CALL NCLVST ( IBTAR, ICHTAR )
171 IF ( IPWELL .LE. 0 ) IPWELL = ITNCMX
173 IF ( EKECON .LT. 2.D+00 * GAMMIN ) THEN
178 RADSIG = ( RADTOT + DEBRLM ) * BFCLMB
185 RADMAX = RADTOT + RADPRO
186 BIMCLM = RDCLMB * BFCLMB
189 IF ( RADHLP .LE. RDCLMB ) THEN
191 BFCHLP = 0.5D+00 * CLMBBR * RDCLMB / EKECON
193 BFCHLP = 0.5D+00 * CLMBBR * RDCLMB / EKECON
194 BFCMAX = SQRT ( 1.D+00 - CLMBBR * RDCLMB / EKECON / RADHLP )
196 BIMMAX = RADHLP * BFCMAX
197 LLLMAX = INT ( BIMMAX / ALMBAR )
198 RADSIG = ALMBAR * ( LLLMAX + 1.D+00 )
199 SIGGEO = PI * RADSIG * RADSIG
201 RADHLP = RADTOT + RADPRO + DEBRLM
202 IF ( RADHLP .LE. RDCLMB ) THEN
205 BFCHLP = 0.5D+00 * CLMBBR * RDCLMB / EKECON
206 BFCMAX = SQRT ( 1.D+00 - CLMBBR * RDCLMB / EKECON / RADHLP )
208 RADSIG = RADHLP * BFCMAX
214 RPHI1 = 2.D+00 * RNDM (1) - 1.D+00
215 RPHI2 = 2.D+00 * RNDM (2) - 1.D+00
216 RPHI12 = RPHI1 * RPHI1
217 RPHI22 = RPHI2 * RPHI2
218 RSQ = RPHI12 + RPHI22
219 IF ( RSQ .GT. 1.D+00 ) GO TO 4200
220 SINPHI = 2.D+00 * RPHI1 * RPHI2 / RSQ
221 COSPHI = ( RPHI12 - RPHI22 ) / RSQ
222 SINT02 = 1.D+00 - CZIMPC * CZIMPC
223 IF ( SINT02 .LT. ANGLSQ ) THEN
228 SINTH0 = SQRT ( SINT02 )
229 SINPH0 = CYIMPC / SINTH0
230 COSPH0 = CXIMPC / SINTH0
231 UBIMPC = COSPHI * COSPH0 * CZIMPC - SINPHI * SINPH0
232 VBIMPC = COSPHI * SINPH0 * CZIMPC + SINPHI * COSPH0
233 WBIMPC = - COSPHI * SINTH0
236 ENTRY BIMNXT ( LBCHCK )
237 IF ( EKECON .LT. 2.D+00 * GAMMIN ) THEN
248 ANMFP = - LOG ( 1.D+00 - RNDM (1) ) / DSKRED
249 IF ( SBRES * SIGMAA .GT. ANMFP ) THEN
257 ALLMAX = LLLMAX + 1.D+00
259 RNDLLL = ALLMAX * MAX ( RNDM (1), RNDM (2) )
260 LLLACT = INT (RNDLLL)
261 BIMPTR = RNDLLL * ALMBAR
262 BIMPTR = ABS (BIMPTR)
263 IF ( BIMPTR .LE. BIMCLM ) THEN
266 HLPHLP = BFCHLP / BIMPTR
267 BFCEFF = 1.D+00 / ( HLPHLP + SQRT ( HLPHLP * HLPHLP
270 BIMPTR = BIMPTR / BFCEFF
271 IF ( BIMPTR .GT. RADHLP ) GO TO 5000
274 BIMPTR = RADSIG * MAX ( RNDM (1), RNDM (2) )
275 IF ( BIMPTR .LE. BIMCLM ) THEN
278 HLPHLP = BFCHLP / BIMPTR
279 BFCEFF = 1.D+00 / ( HLPHLP + SQRT ( HLPHLP * HLPHLP
282 BIMPTR = BIMPTR / BFCEFF
285 IF ( BIMPTR .GT. RADTOT - RADPRO ) THEN
286 BIMPCT = 0.5D+00 * ( RADTOT + BIMPTR - RADPRO )
287 IF ( BIMPTR .GE. RADTOT ) THEN
289 ANGRED = ACOS ( 2.D+00 * X1 / ( RADPRO + X1 ) ) / PI
290 X1 = X1 / ( R0PROT * RPRONU * RADCO2 )
291 DSKRED = ( 0.5D+00 * X1 * X1 + X1 + 1.D+00 ) * EXP (-X1)
294 X1 = RADPRO + BIMPTR - RADTOT
295 ANGRED = ACOS ( 2.D+00 * X1 / ( RADPRO + X1 ) ) / PI
296 X1 = X1 / ( R0PROT * RPRONU * RADCO2 )
297 DSKRED = 1.D+00 - ( 0.5D+00 * X1 * X1 + X1 + 1.D+00 )
298 & * EXP (-X1) * ANGRED
304 IF ( .NOT. LBCHCK ) THEN
306 RHOBIM = FRHONC ( BIMPCT )
307 IF ( RHOBIM .EQ. RHOSAV ) GO TO 5500
308 PFRBIM = FPFRNC ( RHOBIM, ITNCMX )
309 EKFBIM = FEKFNC ( PFRBIM, ITNCMX )
310 RHOHLP = FRHONC ( BIMPTR )
311 PFRHLP = FPFRNC ( RHOHLP, IPWELL )
312 PFRHLP = 0.5D+00 * PFRHLP * PFRHLP / AMNUSQ (IPWELL)
313 IF ( BIMPTR .GT. RADTOT ) BNDNUC = BNDNUC * ( 1.D+00
314 & - ( BIMPTR - RADTOT ) / ( RADHLP - RADTOT ) )
315 VPRBIM = WLLRED * ( AMNUCL (IPWELL) * PFRHLP
316 & * ( 1.D+00 - 0.5D+00 * PFRHLP ) + BNDNUC )
320 CALL SIGFER ( KPTOIP (KPROJ), EKESIG, PPRSIG, LFERMI )
321 PRCOLP = ZUSFL / AUSFL * SIGMAP
322 PRCOLN = ( AUSFL - ZUSFL ) / AUSFL * SIGMAN
323 SIGMAA = PRCOLP + PRCOLN
324 PRCOLP = PRCOLP / SIGMAA
325 PRCOLN = 1.D+00 - PRCOLP
328 RHOBIM = FRHONC ( BIMPCT )
330 XBIMPC = UBIMPC * BIMPCT
331 YBIMPC = VBIMPC * BIMPCT
332 ZBIMPC = WBIMPC * BIMPCT
334 ANMFP = - LOG ( 1.D+00 - RNDM (1) ) / DSKRED
335 IF ( BIMPCT .GT. RAD1O2 ) THEN
336 SBTTSQ = 4.D+00 * ( RADTOT**2 - BIMPCT**2 ) * RHOBIM**2
337 IF ( SBTTSQ .LE. ( ANMFP / SIGMAA )**2 ) GO TO 5000
339 CALL SBCOMP ( SBHAL0, SBSKI0, SBCEN0, SBCEN1, SBSKI1, SBHAL1 )
340 SBTOT = SBHAL0 + SBSKI0 + SBCEN0 + SBCEN1 + SBSKI1 + SBHAL1
341 SBTOT = RHRUSF * SBTOT
342 IF ( SBTOT * SIGMAA .LE. ANMFP ) GO TO 5000
344 SBUSED = SBUSED * RHRUSF + ANMFP / SIGMAA
345 SBRES = SBTOT - SBUSED
346 SBUSED = SBUSED / RHRUSF
350 IF ( RNDM (1) .LT. PRCOLP ) THEN
357 IPRTYP = KPROJ * 10 + KNUCIM
358 CALL RSCOMP ( SBHAL0, SBSKI0, SBCEN0, SBCEN1, SBSKI1, SBHAL1 )
360 RHOIMP = FRHONC ( ABS (RIMPCT) )
361 PFRIMP = FPFRNC ( RHOIMP, ITFRMI )
362 EKFIMP = FEKFNC ( PFRIMP, ITFRMI )
363 RIMHLP = ABS (RIMPTR)
364 RHOIMT = FRHONC ( RIMHLP )
365 PFRPRO = FPFRNC ( RHOIMT, IPWELL )
366 EKFPRO = FEKFNC ( PFRPRO, IPWELL )
367 IF ( RIMHLP .GT. RADTOT ) BNDNUC = BNDNUC * ( 1.D+00 - ( RIMHLP
368 & - RADTOT ) / ( RADHLP - RADTOT ))
369 VPRWLL = WLLRED * ( EKFPRO + BNDNUC )
370 EKEWLL = EKECON + VPRWLL
371 EPSWLL = EKEWLL + AM (KPROJ)
372 IF ( .NOT. LBCHCK ) THEN
373 PPRWLL = SQRT ( EKEWLL * ( EKEWLL + 2.D+00 * AM (KPROJ) ) )
374 CALL PHDWLL ( UBIMPC, VBIMPC, WBIMPC )
375 PNFRMI = PFNCLV ( ITFRMI, .TRUE. )
376 IF ( PNFRMI .LT. -100.D+00 ) GO TO 4400
377 CALL RACO ( PXFERM, PYFERM, PZFERM )
378 PXFERM = PXFERM * PNFRMI
379 PYFERM = PYFERM * PNFRMI
380 PZFERM = PZFERM * PNFRMI
381 ERES = EKEWLL + AM (KPROJ) + AM (KNUCIM) + EKFERM
382 PXRES = PXPROJ + PXFERM
383 PYRES = PYPROJ + PYFERM
384 PZRES = PZPROJ + PZFERM
385 PTRES2 = PXRES**2 + PYRES**2 + PZRES**2
386 UMO2 = ERES**2 - PTRES2
387 EKESIG = 0.5D+00 * ( UMO2 - AM (KPROJ)**2 - AM (KNUCIM)**2 )
388 & / AM (KNUCIM) - AM (KPROJ)
389 EKFIMP = MAX ( EKFERM, EKFIMP )
391 EKESIG = EPSWLL - AM (KPROJ)
393 PPRSIG = SQRT ( EKESIG * ( EKESIG + 2.D+00 * AM (KPROJ) ) )
397 CALL SIGFER ( KPTOIP (KPROJ), EKESIG, PPRSIG, LFERMI )
398 IF ( KNUCIM .EQ. 1 ) THEN
399 SIGMAR = SIGMAP / SIGMP0
401 SIGMAR = SIGMAN / SIGMN0
403 SIGMAR = MIN ( SIGMAR, ONEONE )
406 IF ( RNDREJ .GE. SIGMAR ) GO TO 4300
408 ZITA = 0.5D+00 * ( EKFIMP + EKFPRO ) / EKEWLL
409 IF ( ZITA .LE. 0.5D+00 ) THEN
410 PZITA = 1.D+00 - 1.4D+00 * ZITA
412 PZITA = 1.D+00 - 1.4D+00 * ZITA + 0.4D+00 * ZITA
413 & * ( 2.D+00 - 1.D+00 / ZITA )**2.5D+00
415 RNDREJ = RNDREJ / SIGMAR
416 IF ( RNDREJ .GE. PZITA ) GO TO 4300
420 OPACTY = 1.D+00 / NTRIAL
422 *=== End of subroutine Bimsel =========================================*