00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 SUBROUTINE PHOBOS(IP,PBOOS1,PBOOS2,FIRST,LAST)
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 IMPLICIT NONE
00106 DOUBLE PRECISION BET1(3),BET2(3),GAM1,GAM2,PB,DATA
00107 INTEGER I,J,FIRST,LAST,MAXSTA,NSTACK,IP
00108 PARAMETER (MAXSTA=10000)
00109 INTEGER STACK(MAXSTA)
00110 REAL*8 PBOOS1(5),PBOOS2(5)
00111 INTEGER NMXHEP
00112 PARAMETER (NMXHEP=10000)
00113 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00114 REAL*8 PHEP,VHEP
00115 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00116 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00117 IF ((LAST.EQ.0).OR.(LAST.LT.FIRST)) RETURN
00118 NSTACK=0
00119 DO 10 J=1,3
00120 BET1(J)=-PBOOS1(J)/PBOOS1(5)
00121 10 BET2(J)=PBOOS2(J)/PBOOS2(5)
00122 GAM1=PBOOS1(4)/PBOOS1(5)
00123 GAM2=PBOOS2(4)/PBOOS2(5)
00124
00125
00126 20 DO 50 I=FIRST,LAST
00127 PB=BET1(1)*PHEP(1,I)+BET1(2)*PHEP(2,I)+BET1(3)*PHEP(3,I)
00128 IF (JMOHEP(1,I).EQ.IP) THEN
00129 DO 30 J=1,3
00130 30 PHEP(J,I)=PHEP(J,I)+BET1(J)*(PHEP(4,I)+PB/(GAM1+1.D0))
00131 PHEP(4,I)=GAM1*PHEP(4,I)+PB
00132
00133
00134 PB=BET2(1)*PHEP(1,I)+BET2(2)*PHEP(2,I)+BET2(3)*PHEP(3,I)
00135 DO 40 J=1,3
00136 40 PHEP(J,I)=PHEP(J,I)+BET2(J)*(PHEP(4,I)+PB/(GAM2+1.D0))
00137 PHEP(4,I)=GAM2*PHEP(4,I)+PB
00138 IF (JDAHEP(1,I).NE.0) THEN
00139 NSTACK=NSTACK+1
00140
00141
00142 IF (NSTACK.GT.MAXSTA) THEN
00143 DATA=NSTACK
00144 CALL PHOERR(7,'PHOBOS',DATA)
00145 ENDIF
00146 STACK(NSTACK)=I
00147 ENDIF
00148 ENDIF
00149 50 CONTINUE
00150 IF (NSTACK.NE.0) THEN
00151
00152
00153 FIRST=JDAHEP(1,STACK(NSTACK))
00154 LAST=JDAHEP(2,STACK(NSTACK))
00155 IP=STACK(NSTACK)
00156 NSTACK=NSTACK-1
00157 GOTO 20
00158 ENDIF
00159 RETURN
00160 END
00161 SUBROUTINE PHOIN(IP,BOOST,NHEP0)
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180 IMPLICIT NONE
00181 INTEGER NMXHEP
00182 PARAMETER (NMXHEP=10000)
00183 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00184 REAL*8 PHEP,VHEP
00185 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00186 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00187 INTEGER NMXPHO
00188 PARAMETER (NMXPHO=10000)
00189 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00190 REAL*8 PPHO,VPHO
00191 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00192 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00193 INTEGER IP,IP2,I,FIRST,LAST,LL,NA
00194 LOGICAL BOOST
00195 INTEGER J,NHEP0
00196 DOUBLE PRECISION BET(3),GAM,PB
00197 COMMON /PHOCMS/ BET,GAM
00198 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00199 REAL*8 FINT,FSEC,EXPEPS
00200 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00201
00202
00203 FIRST=JDAHEP(1,IP)
00204 LAST =JDAHEP(2,IP)
00205 NPHO=3+LAST-FIRST+NHEP-NHEP0
00206 NEVPHO=NPHO
00207
00208 IDPHO(1)=IDHEP(IP)
00209 JDAPHO(1,1)=3
00210 JDAPHO(2,1)=3+LAST-FIRST
00211 DO I=1,5
00212 PPHO(I,1)=PHEP(I,IP)
00213 ENDDO
00214
00215 IP2=JMOHEP(2,JDAHEP(1,IP))
00216 IF((IP2.NE.0).AND.(IP2.NE.IP)) THEN
00217 IDPHO(2)=IDHEP(IP2)
00218 JDAPHO(1,2)=3
00219 JDAPHO(2,2)=3+LAST-FIRST
00220 DO I=1,5
00221 PPHO(I,2)=PHEP(I,IP2)
00222 ENDDO
00223 ELSE
00224 IDPHO(2)=0
00225 DO I=1,5
00226 PPHO(I,2)=0.0D0
00227 ENDDO
00228 ENDIF
00229
00230 DO LL=0,LAST-FIRST
00231 IDPHO(3+LL)=IDHEP(FIRST+LL)
00232 JMOPHO(1,3+LL)=JMOHEP(1,FIRST+LL)
00233 IF (JMOHEP(1,FIRST+LL).EQ.IP) JMOPHO(1,3+LL)=1
00234 DO I=1,5
00235 PPHO(I,3+LL)=PHEP(I,FIRST+LL)
00236 ENDDO
00237 ENDDO
00238 IF (NHEP.GT.NHEP0) THEN
00239
00240 NA=3+LAST-FIRST
00241 DO LL=1,NHEP-NHEP0
00242 IDPHO(NA+LL)=IDHEP(NHEP0+LL)
00243 JMOPHO(1,NA+LL)=JMOHEP(1,NHEP0+LL)
00244 IF (JMOHEP(1,NHEP0+LL).EQ.IP) JMOPHO(1,NA+LL)=1
00245 DO I=1,5
00246 PPHO(I,NA+LL)=PHEP(I,NHEP0+LL)
00247 ENDDO
00248 ENDDO
00249
00250 JDAPHO(2,1)=3+LAST-FIRST+NHEP-NHEP0
00251 ENDIF
00252 IF(IDPHO(NPHO).EQ.22)CALL PHLUPA(100001)
00253
00254 CALL PHCORK(0)
00255 IF(IDPHO(NPHO).EQ.22)CALL PHLUPA(100002)
00256
00257 IF(IFTOP) CALL PHOTWO(0)
00258 BOOST=.FALSE.
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271 IF ((ABS(PPHO(1,1)+ABS(PPHO(2,1))+ABS(PPHO(3,1))).GT.
00272 $ PPHO(5,1)*1.D-8).AND.(PPHO(5,1).NE.0)) THEN
00273
00274 BOOST=.TRUE.
00275
00276
00277
00278
00279 DO 10 J=1,3
00280 10 BET(J)=-PPHO(J,1)/PPHO(5,1)
00281 GAM=PPHO(4,1)/PPHO(5,1)
00282 DO 30 I=JDAPHO(1,1),JDAPHO(2,1)
00283 PB=BET(1)*PPHO(1,I)+BET(2)*PPHO(2,I)+BET(3)*PPHO(3,I)
00284 DO 20 J=1,3
00285 20 PPHO(J,I)=PPHO(J,I)+BET(J)*(PPHO(4,I)+PB/(GAM+1.D0))
00286 30 PPHO(4,I)=GAM*PPHO(4,I)+PB
00287
00288 I=1
00289 PB=BET(1)*PPHO(1,I)+BET(2)*PPHO(2,I)+BET(3)*PPHO(3,I)
00290 DO J=1,3
00291 PPHO(J,I)=PPHO(J,I)+BET(J)*(PPHO(4,I)+PB/(GAM+1.D0))
00292 ENDDO
00293 PPHO(4,I)=GAM*PPHO(4,I)+PB
00294 ENDIF
00295
00296 IF(IFTOP) CALL PHOTWO(1)
00297 CALL PHLUPA(2)
00298 IF(IDPHO(NPHO).EQ.22) CALL PHLUPA(10000)
00299
00300 END
00301 SUBROUTINE PHOTWO(MODE)
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 IMPLICIT NONE
00318 INTEGER NMXPHO
00319 PARAMETER (NMXPHO=10000)
00320 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00321 REAL*8 PPHO,VPHO
00322 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00323 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00324 DOUBLE PRECISION BET(3),GAM
00325 COMMON /PHOCMS/ BET,GAM
00326 INTEGER I,MODE
00327 REAL*8 MPASQR
00328 LOGICAL IFRAD
00329
00330
00331
00332
00333
00334
00335 IF(MODE.EQ.0) THEN
00336 IFRAD=(IDPHO(1).EQ.21).AND.(IDPHO(2).EQ.21)
00337 IFRAD=IFRAD.OR.(IDPHO(1).EQ.-IDPHO(2).AND.ABS(IDPHO(1)).LE.6)
00338 IFRAD=IFRAD
00339 & .AND.(ABS(IDPHO(3)).EQ.6).AND.(ABS(IDPHO(4)).EQ.6)
00340 MPASQR= (PPHO(4,1)+PPHO(4,2))**2-(PPHO(3,1)+PPHO(3,2))**2
00341 & -(PPHO(2,1)+PPHO(2,2))**2-(PPHO(1,1)+PPHO(1,2))**2
00342 IFRAD=IFRAD.AND.(MPASQR.GT.0.0D0)
00343 IF(IFRAD) THEN
00344
00345 DO I=1,4
00346 PPHO(I,1)=PPHO(I,1)+PPHO(I,2)
00347 ENDDO
00348 PPHO(5,1)=SQRT(MPASQR)
00349
00350 DO I=1,5
00351 PPHO(I,2)=0.0D0
00352 ENDDO
00353 ENDIF
00354 ELSE
00355
00356
00357
00358 ENDIF
00359 END
00360 SUBROUTINE PHOOUT(IP,BOOST,NHEP0)
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379 IMPLICIT NONE
00380 INTEGER NMXHEP
00381 PARAMETER (NMXHEP=10000)
00382 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00383 REAL*8 PHEP,VHEP
00384 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00385 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00386 INTEGER NMXPHO
00387 PARAMETER (NMXPHO=10000)
00388 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00389 REAL*8 PPHO,VPHO
00390 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00391 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00392 INTEGER IP,LL,FIRST,LAST,I
00393 LOGICAL BOOST
00394 INTEGER NN,J,K,NHEP0,NA
00395 DOUBLE PRECISION BET(3),GAM,PB
00396 COMMON /PHOCMS/ BET,GAM
00397 IF(NPHO.EQ.NEVPHO) RETURN
00398
00399 CALL PHLUPA(10)
00400 IF (BOOST) THEN
00401 DO 110 J=JDAPHO(1,1),JDAPHO(2,1)
00402 PB=-BET(1)*PPHO(1,J)-BET(2)*PPHO(2,J)-BET(3)*PPHO(3,J)
00403 DO 100 K=1,3
00404 100 PPHO(K,J)=PPHO(K,J)-BET(K)*(PPHO(4,J)+PB/(GAM+1.D0))
00405 110 PPHO(4,J)=GAM*PPHO(4,J)+PB
00406
00407 DO NN=NEVPHO+1,NPHO
00408 PB=-BET(1)*PPHO(1,NN)-BET(2)*PPHO(2,NN)-BET(3)*PPHO(3,NN)
00409 DO 120 K=1,3
00410 120 PPHO(K,NN)=PPHO(K,NN)-BET(K)*(PPHO(4,NN)+PB/(GAM+1.D0))
00411 PPHO(4,NN)=GAM*PPHO(4,NN)+PB
00412 ENDDO
00413 ENDIF
00414 CALL PHCORK(0)
00415
00416 FIRST=JDAHEP(1,IP)
00417 LAST =JDAHEP(2,IP)
00418
00419 DO LL=0,LAST-FIRST
00420 IDHEP(FIRST+LL) = IDPHO(3+LL)
00421 DO I=1,5
00422 PHEP(I,FIRST+LL) = PPHO(I,3+LL)
00423 ENDDO
00424 ENDDO
00425
00426 NA=3+LAST-FIRST
00427 DO LL=1,NPHO-NA
00428 IDHEP(NHEP0+LL) = IDPHO(NA+LL)
00429 ISTHEP(NHEP0+LL)=ISTPHO(NA+LL)
00430 JMOHEP(1,NHEP0+LL)=IP
00431 JMOHEP(2,NHEP0+LL)=JMOHEP(2,JDAHEP(1,IP))
00432 JDAHEP(1,NHEP0+LL)=0
00433 JDAHEP(2,NHEP0+LL)=0
00434 DO I=1,5
00435 PHEP(I,NHEP0+LL) = PPHO(I,NA+LL)
00436 ENDDO
00437 ENDDO
00438 NHEP=NHEP+NPHO-NEVPHO
00439 CALL PHLUPA(20)
00440 END
00441 SUBROUTINE PHOCHK(JFIRST)
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457 IMPLICIT NONE
00458 INTEGER NMXPHO
00459 PARAMETER (NMXPHO=10000)
00460 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00461 REAL*8 PPHO,VPHO
00462 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00463 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00464 LOGICAL CHKIF
00465 COMMON/PHOIF/CHKIF(NMXPHO)
00466 INTEGER NMXHEP
00467 PARAMETER (NMXHEP=10000)
00468 LOGICAL QEDRAD
00469 COMMON/PH_PHOQED/QEDRAD(NMXHEP)
00470 INTEGER JFIRST
00471 LOGICAL F
00472 INTEGER IDABS,NLAST,I,IPPAR
00473 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW,IFNPI0,IFKL
00474 REAL*8 FINT,FSEC,EXPEPS
00475 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00476 LOGICAL IFRAD
00477 INTEGER IDENT,K,IQRK,IPHQRK,IEKL,IPHEKL
00478
00479 F(IDABS)=
00480 & ( ((IDABS.GT.9.OR.IQRK.NE.1).AND.(IDABS.LE.40))
00481 & .OR.(IDABS.GT.100) )
00482 & .AND.(IDABS.NE.21)
00483 $ .AND.(IDABS.NE.2101).AND.(IDABS.NE.3101).AND.(IDABS.NE.3201)
00484 & .AND.(IDABS.NE.1103).AND.(IDABS.NE.2103).AND.(IDABS.NE.2203)
00485 & .AND.(IDABS.NE.3103).AND.(IDABS.NE.3203).AND.(IDABS.NE.3303)
00486
00487 IQRK=IPHQRK(0)
00488 IEKL=IPHEKL(0)
00489 NLAST = NPHO
00490
00491 IPPAR=1
00492
00493 IFNPI0=.TRUE.
00494 IF (IEKL.GT.1) THEN
00495
00496 IFNPI0= (IDPHO(1).NE.111)
00497 IFKL = ((IDPHO(1).EQ.130).AND.
00498 $ ((IDPHO(3).EQ.22).OR.(IDPHO(4).EQ.22).OR.
00499 $ (IDPHO(5).EQ.22)).AND.
00500 $ ((IDPHO(3).EQ.11).OR.(IDPHO(4).EQ.11).OR.
00501 $ (IDPHO(5).EQ.11)) )
00502
00503 IFNPI0=(IFNPI0.AND.(.NOT.IFKL))
00504 ENDIF
00505 DO 10 I=IPPAR,NLAST
00506 IDABS = ABS(IDPHO(I))
00507
00508 CHKIF(I)= F(IDABS) .AND.F(ABS(IDPHO(1)))
00509 & .AND. (IDPHO(2).EQ.0)
00510 IF(I.GT.2) CHKIF(I)=CHKIF(I).AND.QEDRAD(JFIRST+I-IPPAR-2)
00511 & .AND.IFNPI0
00512 10 CONTINUE
00513
00514
00515
00516 IF(IFTOP) THEN
00517
00518 DO K=JDAPHO(2,1),JDAPHO(1,1),-1
00519 IF(IDPHO(K).NE.22) THEN
00520 IDENT=K
00521 GOTO 15
00522 ENDIF
00523 ENDDO
00524 15 CONTINUE
00525 IFRAD=((IDPHO(1).EQ.21).AND.(IDPHO(2).EQ.21))
00526 & .OR. ((ABS(IDPHO(1)).LE.6).AND.((IDPHO(2)).EQ.(-IDPHO(1))))
00527 IFRAD=IFRAD
00528 & .AND.(ABS(IDPHO(3)).EQ.6).AND.((IDPHO(4)).EQ.(-IDPHO(3)))
00529 & .AND.(IDENT.EQ.4)
00530 IF(IFRAD) THEN
00531 DO 20 I=IPPAR,NLAST
00532 CHKIF(I)= .TRUE.
00533 IF(I.GT.2) CHKIF(I)=CHKIF(I).AND.QEDRAD(JFIRST+I-IPPAR-2)
00534 20 CONTINUE
00535 ENDIF
00536 ENDIF
00537
00538
00539 IF(IFTOP) THEN
00540
00541 DO K=JDAPHO(2,1),JDAPHO(1,1),-1
00542 IF(IDPHO(K).NE.22) THEN
00543 IDENT=K
00544 GOTO 25
00545 ENDIF
00546 ENDDO
00547 25 CONTINUE
00548 IFRAD=((ABS(IDPHO(1)).EQ.6).AND.(IDPHO(2).EQ.0))
00549 IFRAD=IFRAD
00550 & .AND.((ABS(IDPHO(3)).EQ.24).AND.(ABS(IDPHO(4)).EQ.5)
00551 & .OR.(ABS(IDPHO(3)).EQ.5).AND.(ABS(IDPHO(4)).EQ.24))
00552 & .AND.(IDENT.EQ.4)
00553 IF(IFRAD) THEN
00554 DO 30 I=IPPAR,NLAST
00555 CHKIF(I)= .TRUE.
00556 IF(I.GT.2) CHKIF(I)=CHKIF(I).AND.QEDRAD(JFIRST+I-IPPAR-2)
00557 30 CONTINUE
00558 ENDIF
00559 ENDIF
00560
00561
00562 END
00563 SUBROUTINE PHTYPE(ID)
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580 IMPLICIT NONE
00581 INTEGER NMXHEP
00582 PARAMETER (NMXHEP=10000)
00583 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00584 REAL*8 PHEP,VHEP
00585 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00586 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00587 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00588 REAL*8 FINT,FSEC,EXPEPS
00589 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00590 LOGICAL EXPINI
00591 INTEGER NX,K,NCHAN
00592 PARAMETER (NX=10)
00593 REAL*8 PRO,PRSUM,ESU
00594 COMMON /PHOEXP/ PRO(NX),NCHAN,EXPINI
00595
00596 INTEGER ID,NHEP0
00597 LOGICAL IPAIR
00598 REAL*8 RN,PHORANC,SUM
00599 INTEGER WTDUM
00600 LOGICAL IFOUR
00601
00602 IFOUR=(.TRUE.).AND.(ITRE)
00603
00604 IPAIR=.TRUE.
00605
00606 IF (JDAHEP(1,ID).EQ.0) RETURN
00607
00608
00609 NHEP0=NHEP
00610
00611 IF (IEXP) THEN
00612 EXPINI=.TRUE.
00613 DO NCHAN=1,NX
00614 PRO(NCHAN)=0.D0
00615 ENDDO
00616 NCHAN=0
00617
00618 FSEC=1.0D0
00619 CALL PHOMAK(ID,NHEP0)
00620
00621 EXPINI=.FALSE.
00622 RN=PHORANC(WTDUM)
00623 PRSUM=0
00624 DO K=1,NX
00625 PRSUM=PRSUM+PRO(K)
00626 ENDDO
00627 ESU=EXP(-PRSUM)
00628
00629
00630 SUM=ESU
00631
00632 DO K=1,100
00633 IF(RN.LT.SUM) GOTO 100
00634 ESU=ESU*PRSUM/K
00635 SUM=SUM+ESU
00636 NCHAN=0
00637 CALL PHOMAK(ID,NHEP0)
00638 IF(SUM.GT.1D0-EXPEPS) GOTO 100
00639 ENDDO
00640 100 CONTINUE
00641 ELSEIF(IFOUR) THEN
00642
00643 FSEC=1.0D0
00644 RN=PHORANC(WTDUM)
00645 IF (RN.GE.23.D0/24D0) THEN
00646 CALL PHOMAK(ID,NHEP0)
00647 CALL PHOMAK(ID,NHEP0)
00648 CALL PHOMAK(ID,NHEP0)
00649 CALL PHOMAK(ID,NHEP0)
00650 ELSEIF (RN.GE.17.D0/24D0) THEN
00651 CALL PHOMAK(ID,NHEP0)
00652 CALL PHOMAK(ID,NHEP0)
00653 ELSEIF (RN.GE.9.D0/24D0) THEN
00654 CALL PHOMAK(ID,NHEP0)
00655 ENDIF
00656 ELSEIF(ITRE) THEN
00657
00658 FSEC=1.0D0
00659 RN=PHORANC(WTDUM)
00660 IF (RN.GE.5.D0/6D0) THEN
00661 CALL PHOMAK(ID,NHEP0)
00662 CALL PHOMAK(ID,NHEP0)
00663 CALL PHOMAK(ID,NHEP0)
00664 ELSEIF (RN.GE.2.D0/6D0) THEN
00665 CALL PHOMAK(ID,NHEP0)
00666 ENDIF
00667 ELSEIF(ISEC) THEN
00668
00669 FSEC=1.0D0
00670 RN=PHORANC(WTDUM)
00671 IF (RN.GE.0.5D0) THEN
00672 CALL PHOMAK(ID,NHEP0)
00673 CALL PHOMAK(ID,NHEP0)
00674 ENDIF
00675 ELSE
00676
00677 FSEC=1.0D0
00678 CALL PHOMAK(ID,NHEP0)
00679 ENDIF
00680
00681
00682
00683 END
00684 SUBROUTINE PHOMAK(IPPAR,NHEP0)
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 IMPLICIT NONE
00705 DOUBLE PRECISION DATA
00706 REAL*8 PHORANC
00707 INTEGER IP,IPPAR,NCHARG,IDME
00708 INTEGER WTDUM,IDUM,NHEP0
00709 INTEGER NCHARB,NEUDAU
00710 REAL*8 RN,WT,PHINT,XDUMM,PHwtNLO
00711 LOGICAL BOOST
00712 INTEGER NMXHEP
00713 PARAMETER (NMXHEP=10000)
00714 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00715 REAL*8 PHEP,VHEP
00716 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00717 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00718 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00719 REAL*8 FINT,FSEC,EXPEPS
00720 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00721
00722 IP=IPPAR
00723 IDUM=1
00724 NCHARG=0
00725
00726 CALL PHOIN(IP,BOOST,NHEP0)
00727 CALL PHOCHK(JDAHEP(1,IP))
00728 WT=0.0D0
00729 CALL PHOPRE(1,WT,NEUDAU,NCHARB)
00730
00731 IF (WT.EQ.0.0D0) RETURN
00732 RN=PHORANC(WTDUM)
00733
00734 CALL PHODO(1,NCHARB,NEUDAU)
00735
00736
00737
00738 CALL ME_CHANNEL(IDME)
00739
00740
00741
00742 IF( IDME.EQ.0) THEN
00743
00744 IF (INTERF) WT=WT*PHINT(IDUM)/FINT
00745 IF (IFW) CALL PHOBW (WT)
00746
00747 ELSEIF (IDME.EQ.2) THEN
00748
00749 CALL PHOBWnlo(WT)
00750 WT=WT*2D0/FINT
00751
00752 ELSEIF (IDME.EQ.1) THEN
00753
00754 xdumm=0.5D0
00755 WT=WT*PHwtnlo(xdumm)/FINT
00756
00757 ELSE
00758 write(*,*) 'problem with ME_CHANNEL IDME=',IDME
00759 stop
00760 ENDIF
00761
00762
00763 DATA=WT
00764 IF (WT.GT.1.0D0) CALL PHOERR(3,'WT_INT',DATA)
00765
00766 IF (RN.LE.WT) THEN
00767 CALL PHOOUT(IP,BOOST,NHEP0)
00768 ENDIF
00769 RETURN
00770 END
00771 FUNCTION PHINT1(IDUM)
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791 IMPLICIT NONE
00792 REAL*8 PHINT,phint1
00793 REAL*8 PHOCHA
00794 INTEGER IDUM
00795 INTEGER NMXPHO
00796 PARAMETER (NMXPHO=10000)
00797 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00798 REAL*8 PPHO,VPHO
00799 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00800 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00801 DOUBLE PRECISION MCHSQR,MNESQR
00802 REAL*8 PNEUTR
00803 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
00804 DOUBLE PRECISION COSTHG,SINTHG
00805 REAL*8 XPHMAX,XPHOTO
00806 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
00807 REAL*8 MPASQR,XX,BETA
00808 LOGICAL IFINT
00809 INTEGER K,IDENT
00810
00811 DO K=JDAPHO(2,1),JDAPHO(1,1),-1
00812 IF(IDPHO(K).NE.22) THEN
00813 IDENT=K
00814 GOTO 20
00815 ENDIF
00816 ENDDO
00817 20 CONTINUE
00818
00819 IFINT= NPHO.GT.IDENT
00820
00821 IFINT= IFINT.AND.(IDENT-JDAPHO(1,1)).EQ.1
00822
00823 IFINT= IFINT.AND.IDPHO(JDAPHO(1,1)).EQ.-IDPHO(IDENT)
00824
00825 IFINT= IFINT.AND.PHOCHA(IDPHO(IDENT)).NE.0
00826
00827 IF(IFINT) THEN
00828 MPASQR = PPHO(5,1)**2
00829 XX=4.D0*MCHSQR/MPASQR*(1.D0-XPHOTO)/(1.D0-XPHOTO+(MCHSQR-MNESQR)
00830 & /MPASQR)**2
00831 BETA=SQRT(1.D0-XX)
00832 PHINT = 2D0/(1D0+COSTHG**2*BETA**2)
00833 ELSE
00834 PHINT = 1D0
00835 ENDIF
00836 phint1=1
00837 END
00838
00839 FUNCTION PHINT2(IDUM)
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859 IMPLICIT NONE
00860 REAL*8 PHINT,PHINT1,PHINT2
00861 REAL*8 PHOCHA
00862 INTEGER IDUM
00863 INTEGER NMXPHO
00864 PARAMETER (NMXPHO=10000)
00865 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00866 REAL*8 PPHO,VPHO
00867 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00868 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00869 DOUBLE PRECISION MCHSQR,MNESQR
00870 REAL*8 PNEUTR
00871 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
00872 DOUBLE PRECISION COSTHG,SINTHG
00873 REAL*8 XPHMAX,XPHOTO
00874 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
00875 REAL*8 MPASQR,XX,BETA,PQ1(4),PQ2(4),PPHOT(4)
00876 REAL*8 SS,PP2,PP,E1,E2,Q1,Q2,COSTHE
00877 LOGICAL IFINT
00878 INTEGER K,IDENT
00879
00880 DO K=JDAPHO(2,1),JDAPHO(1,1),-1
00881 IF(IDPHO(K).NE.22) THEN
00882 IDENT=K
00883 GOTO 20
00884 ENDIF
00885 ENDDO
00886 20 CONTINUE
00887
00888 IFINT= NPHO.GT.IDENT
00889
00890 IFINT= IFINT.AND.(IDENT-JDAPHO(1,1)).EQ.1
00891
00892
00893
00894 IFINT= IFINT.AND.abs(PHOCHA(IDPHO(IDENT))).GT.0.01D0
00895
00896 IFINT= IFINT.AND.
00897 $ abs(PHOCHA(IDPHO(JDAPHO(1,1)))).gt.0.01D0
00898
00899 IF(IFINT) THEN
00900 MPASQR = PPHO(5,1)**2
00901 XX=4.D0*MCHSQR/MPASQR*(1.-XPHOTO)/(1.-XPHOTO+(MCHSQR-MNESQR)/
00902 & MPASQR)**2
00903 BETA=SQRT(1.D0-XX)
00904 PHINT = 2D0/(1D0+COSTHG**2*BETA**2)
00905 SS =MPASQR*(1.D0-XPHOTO)
00906 PP2=((SS-MCHSQR-MNESQR)**2-4*MCHSQR*MNESQR)/SS/4
00907 PP =SQRT(PP2)
00908 E1 =SQRT(PP2+MCHSQR)
00909 E2 =SQRT(PP2+MNESQR)
00910 PHINT= (E1+E2)**2/((E2+COSTHG*PP)**2+(E1-COSTHG*PP)**2)
00911
00912 q1=PHOCHA(IDPHO(JDAPHO(1,1)))
00913 q2=PHOCHA(IDPHO(IDENT))
00914 do k=1,4
00915 pq1(k)=ppho(k,JDAPHO(1,1))
00916 pq2(k)=ppho(k,JDAPHO(1,1)+1)
00917 pphot(k)=ppho(k,npho)
00918 enddo
00919 costhe=(pphot(1)*pq1(1)+pphot(2)*pq1(2)+pphot(3)*pq1(3))
00920 costhe=costhe/sqrt(pq1(1)**2+pq1(2)**2+pq1(3)**2)
00921 costhe=costhe/sqrt(pphot(1)**2+pphot(2)**2+pphot(3)**2)
00922
00923
00924
00925
00926
00927 IF (costhg*costhe.GT.0) then
00928
00929 PHINT= (q1*(E2+COSTHG*PP)-q2*(E1-COSTHG*PP))**2
00930 & /(q1**2*(E2+COSTHG*PP)**2+q2**2*(E1-COSTHG*PP)**2)
00931 ELSE
00932
00933 PHINT= (q1*(E1-COSTHG*PP)-q2*(E2+COSTHG*PP))**2
00934 & /(q1**2*(E1-COSTHG*PP)**2+q2**2*(E2+COSTHG*PP)**2)
00935 ENDIF
00936 ELSE
00937 PHINT = 1D0
00938 ENDIF
00939 phint1=1
00940 phint2=1
00941 END
00942
00943
00944 SUBROUTINE PHOPRE(IPARR,WT,NEUDAU,NCHARB)
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967 IMPLICIT NONE
00968 DOUBLE PRECISION MINMAS,MPASQR,MCHREN
00969 DOUBLE PRECISION BETA,EPS,DEL1,DEL2,DATA,BIGLOG
00970 REAL*8 PHOCHA,PHOSPI,PHORANC,PHOCOR,PHOCORN,MASSUM
00971 INTEGER IP,IPARR,IPPAR,I,J,ME,NCHARG,NEUPOI,NLAST,THEDUM
00972 INTEGER IDABS,IDUM
00973 INTEGER NCHARB,NEUDAU
00974 REAL*8 WT,WGT
00975 INTEGER NMXPHO
00976 PARAMETER (NMXPHO=10000)
00977 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
00978 REAL*8 PPHO,VPHO
00979 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00980 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00981 LOGICAL CHKIF
00982 COMMON/PHOIF/CHKIF(NMXPHO)
00983 INTEGER CHAPOI(NMXPHO)
00984 DOUBLE PRECISION MCHSQR,MNESQR
00985 REAL*8 PNEUTR
00986 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
00987 DOUBLE PRECISION COSTHG,SINTHG
00988 REAL*8 XPHMAX,XPHOTO
00989 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
00990 REAL*8 ALPHA,XPHCUT
00991 COMMON/PHOCOP/ALPHA,XPHCUT
00992 INTEGER IREP,IDME
00993 REAL*8 PROBH,CORWT,XF
00994 COMMON/PHOPRO/PROBH,CORWT,XF,IREP
00995
00996 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00997 REAL*8 FINT,FSEC,EXPEPS
00998 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
00999 REAL*8 WT1,WT2,WT3
01000 COMMON /PHWT/ BETA,WT1,WT2,WT3
01001 DOUBLE PRECISION phocorWT3,phocorWT2,phocorWT1
01002 common/phocorWT/phocorWT3,phocorWT2,phocorWT1
01003 real*8 a,b
01004
01005 IPPAR=IPARR
01006
01007 IP=IPPAR
01008 NLAST=NPHO
01009 IDUM=1
01010
01011
01012 IF (JDAPHO(1,IP).EQ.0) RETURN
01013
01014
01015 10 NCHARG=0
01016 IREP=0
01017 MINMAS=0.D0
01018 MASSUM=0.D0
01019 DO 20 I=JDAPHO(1,IP),JDAPHO(2,IP)
01020
01021
01022
01023 IDABS=ABS(IDPHO(I))
01024 IF (CHKIF(I-JDAPHO(1,IP)+3)) THEN
01025 IF (PHOCHA(IDPHO(I)).NE.0) THEN
01026 NCHARG=NCHARG+1
01027 IF (NCHARG.GT.NMXPHO) THEN
01028 DATA=NCHARG
01029 CALL PHOERR(1,'PHOTOS',DATA)
01030 ENDIF
01031 CHAPOI(NCHARG)=I
01032 ENDIF
01033 MINMAS=MINMAS+PPHO(5,I)**2
01034 ENDIF
01035 MASSUM=MASSUM+PPHO(5,I)
01036 20 CONTINUE
01037 IF (NCHARG.NE.0) THEN
01038
01039
01040 IF ((PPHO(5,IP)-MASSUM)/PPHO(5,IP).GT.2.D0*XPHCUT) THEN
01041
01042 30 CONTINUE
01043 DO 70 J=1,3
01044 70 PNEUTR(J)=-PPHO(J,CHAPOI(NCHARG))
01045 PNEUTR(4)=PPHO(5,IP)-PPHO(4,CHAPOI(NCHARG))
01046
01047
01048 MPASQR=PPHO(5,IP)**2
01049 MCHSQR=PPHO(5,CHAPOI(NCHARG))**2
01050 IF ((JDAPHO(2,IP)-JDAPHO(1,IP)).EQ.1) THEN
01051 NEUPOI=JDAPHO(1,IP)
01052 IF (NEUPOI.EQ.CHAPOI(NCHARG)) NEUPOI=JDAPHO(2,IP)
01053 MNESQR=PPHO(5,NEUPOI)**2
01054 PNEUTR(5)=PPHO(5,NEUPOI)
01055 ELSE
01056 MNESQR=PNEUTR(4)**2-PNEUTR(1)**2-PNEUTR(2)**2-PNEUTR(3)**2
01057 MNESQR=MAX(MNESQR,MINMAS-MCHSQR)
01058 PNEUTR(5)=SQRT(MNESQR)
01059 ENDIF
01060
01061
01062 XPHMAX=(MPASQR-(PNEUTR(5)+PPHO(5,CHAPOI(NCHARG)))**2)/MPASQR
01063
01064
01065 CALL PHOENE(MPASQR,MCHREN,BETA,BIGLOG,IDPHO(CHAPOI(NCHARG)))
01066
01067 IF (XPHOTO.LT.-4D0) THEN
01068 NCHARG=0
01069 XPHOTO=0d0
01070
01071 ELSEIF ((XPHOTO.LT.XPHCUT).OR.(XPHOTO.GT.XPHMAX)) THEN
01072
01073
01074
01075 NCHARG=NCHARG-1
01076 IF (NCHARG.GT.0) THEN
01077 IREP=IREP+1
01078 GOTO 30
01079 ENDIF
01080 ELSE
01081
01082
01083
01084 EPS=MCHREN/(1.D0+BETA)
01085
01086
01087 DEL1=(2.D0-EPS)*(EPS/(2.D0-EPS))**PHORANC(THEDUM)
01088 DEL2=2.D0-DEL1
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114 COSTHG=(1.D0-DEL1)/BETA
01115 SINTHG=SQRT(DEL1*DEL2-MCHREN)/BETA
01116 WGT=1D0
01117
01118
01119
01120
01121 ME=2.D0*PHOSPI(IDPHO(CHAPOI(NCHARG)))+1.D0
01122
01123
01124
01125
01126 DO I=JDAPHO(1,IP),JDAPHO(2,IP)
01127 IF (I.NE.CHAPOI(NCHARG)) THEN
01128 NEUDAU=I
01129 GOTO 51
01130 ENDIF
01131 ENDDO
01132
01133
01134 DATA=NCHARG
01135 CALL PHOERR(5,'PHOKIN',DATA)
01136 51 CONTINUE
01137 NCHARB=CHAPOI(NCHARG)
01138 NCHARB=NCHARB-JDAPHO(1,IP)+3
01139 NEUDAU=NEUDAU-JDAPHO(1,IP)+3
01140
01141 CALL ME_CHANNEL(IDME)
01142
01143
01144
01145
01146 IF(IDME.EQ.2) THEN
01147 b=PHOCORN(MPASQR,MCHREN,ME)
01148 WT=b*WGT
01149 WT=WT/(1-xphoto/xphmax+0.5*(xphoto/xphmax)**2)*(1-xphoto/xphmax)/2
01150 ELSEIF(IDME.EQ.1) THEN
01151
01152 a=PHOCOR(MPASQR,MCHREN,ME)
01153 b=PHOCORN(MPASQR,MCHREN,ME)
01154 WT=b*WGT
01155 WT=WT*wt1*wt2*wt3/phocorwt1/phocorwt2/phocorwt3
01156
01157
01158
01159 ELSE
01160 a=PHOCOR(MPASQR,MCHREN,ME)
01161 WT=a*WGT
01162
01163 ENDIF
01164
01165
01166 ENDIF
01167 ELSE
01168 DATA=PPHO(5,IP)-MASSUM
01169 CALL PHOERR(10,'PHOTOS',DATA)
01170 ENDIF
01171 ENDIF
01172
01173 RETURN
01174 END
01175 SUBROUTINE PHOENE(MPASQR,MCHREN,BETA,BIGLOG,IDENT)
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197 IMPLICIT NONE
01198 DOUBLE PRECISION MPASQR,MCHREN,BIGLOG,BETA,DATA
01199 INTEGER IWT1,IRN,IWT2
01200 REAL*8 PRSOFT,PRHARD,PHORANC,PHOFAC
01201 DOUBLE PRECISION MCHSQR,MNESQR
01202 REAL*8 PNEUTR
01203 INTEGER IDENT
01204 REAL*8 PHOCHA,PRKILL,RRR
01205 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
01206 DOUBLE PRECISION COSTHG,SINTHG
01207 REAL*8 XPHMAX,XPHOTO
01208 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
01209 REAL*8 ALPHA,XPHCUT
01210 COMMON/PHOCOP/ALPHA,XPHCUT
01211 REAL*8 PI,TWOPI
01212 COMMON/PHPICO/PI,TWOPI
01213 INTEGER IREP
01214 REAL*8 PROBH,CORWT,XF
01215 COMMON/PHOPRO/PROBH,CORWT,XF,IREP
01216 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
01217 REAL*8 FINT,FSEC,EXPEPS
01218 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
01219 INTEGER NX,NCHAN,K,IDME
01220 PARAMETER (NX=10)
01221 LOGICAL EXPINI
01222 REAL*8 PRO,PRSUM
01223 COMMON /PHOEXP/ PRO(NX),NCHAN,EXPINI
01224
01225 IF (XPHMAX.LE.XPHCUT) THEN
01226 BETA=PHOFAC(-1)
01227 XPHOTO=0.0D0
01228 RETURN
01229 ENDIF
01230
01231 MCHREN=4.D0*MCHSQR/MPASQR/(1.D0+MCHSQR/MPASQR)**2
01232 BETA=SQRT(1.D0-MCHREN)
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245 BIGLOG=LOG(MPASQR/MCHSQR*(1.D0+BETA)**2/4.D0*
01246 & (1.D0+MCHSQR/MPASQR)**2)
01247 PRHARD=ALPHA/PI*(1D0/BETA*BIGLOG)*
01248 &(LOG(XPHMAX/XPHCUT)-.75D0+XPHCUT/XPHMAX-.25D0*XPHCUT**2/XPHMAX**2)
01249 PRHARD=PRHARD*PHOCHA(IDENT)**2*FSEC*FINT
01250 CALL ME_CHANNEL(IDME)
01251
01252 IF (IDME.EQ.0) THEN
01253 continue
01254 ELSEIF (IDME.EQ.1) THEN
01255 PRHARD=PRHARD/(1d0+0.75*ALPHA/PI)
01256 ELSEIF (IDME.EQ.2) THEN
01257 continue
01258 ELSE
01259 write(*,*) 'problem with ME_CHANNEL IDME=',IDME
01260 stop
01261 ENDIF
01262
01263
01264 IF (IREP.EQ.0) PROBH=0.D0
01265 PRKILL=0d0
01266 IF (IEXP) THEN
01267 NCHAN=NCHAN+1
01268 IF (EXPINI) THEN
01269 PRO(NCHAN)=PRHARD+0.05*(1.0+FINT)
01270
01271 PRHARD=0D0
01272 PROBH=PRHARD
01273 ELSE
01274 PRSUM=0
01275 DO K=NCHAN,NX
01276 PRSUM=PRSUM+PRO(K)
01277 ENDDO
01278 PRHARD=PRHARD/PRSUM
01279
01280
01281
01282 PRKILL=PRO(NCHAN)/PRSUM-PRHARD
01283
01284 ENDIF
01285 PRSOFT=1.D0-PRHARD
01286 ELSE
01287 PRHARD=PRHARD*PHOFAC(0)
01288
01289
01290 PROBH=PRHARD
01291 ENDIF
01292 PRSOFT=1.D0-PRHARD
01293
01294
01295 IF (IEXP) THEN
01296 IF (PRSOFT.LT.-5.0D-8) THEN
01297 DATA=PRSOFT
01298 CALL PHOERR(2,'PHOENE',DATA)
01299 ENDIF
01300 ELSE
01301 IF (PRSOFT.LT.0.1D0) THEN
01302 DATA=PRSOFT
01303 CALL PHOERR(2,'PHOENE',DATA)
01304 ENDIF
01305 ENDIF
01306
01307 RRR=PHORANC(IWT1)
01308 IF (RRR.LT.PRSOFT) THEN
01309
01310
01311 XPHOTO=0.D0
01312 IF (RRR.LT.PRKILL) XPHOTO=-5d0
01313 ELSE
01314
01315
01316
01317 10 XPHOTO=EXP(PHORANC(IRN)*LOG(XPHCUT/XPHMAX))
01318 XPHOTO=XPHOTO*XPHMAX
01319 IF (PHORANC(IWT2).GT.((1.D0+(1.D0-XPHOTO/XPHMAX)**2)/2.D0))
01320 & GOTO 10
01321 ENDIF
01322
01323
01324 XF=4.D0*MCHSQR*MPASQR/(MPASQR+MCHSQR-MNESQR)**2
01325 RETURN
01326 END
01327 FUNCTION PHOCOR(MPASQR,MCHREN,ME)
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344
01345
01346
01347 IMPLICIT NONE
01348 DOUBLE PRECISION MPASQR,MCHREN,BETA,XX,YY,DATA
01349 INTEGER ME
01350 REAL*8 PHOCOR,PHOFAC,WT1,WT2,WT3,PHOCORN
01351 COMMON /PHWT/ BETA,WT1,WT2,WT3
01352 DOUBLE PRECISION MCHSQR,MNESQR
01353 REAL*8 PNEUTR
01354 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
01355 DOUBLE PRECISION COSTHG,SINTHG
01356 REAL*8 XPHMAX,XPHOTO
01357 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
01358 INTEGER IREP
01359 REAL*8 PROBH,CORWT,XF
01360 COMMON/PHOPRO/PROBH,CORWT,XF,IREP
01361 INTEGER IscaNLO
01362
01363
01364 XX=4.D0*MCHSQR/MPASQR*(1.D0-XPHOTO)/(1.D0-XPHOTO+(MCHSQR-MNESQR)/
01365 &MPASQR)**2
01366 IF (ME.EQ.1) THEN
01367 YY=1.D0
01368 WT3=(1.D0-XPHOTO/XPHMAX)/((1.D0+(1.D0-XPHOTO/XPHMAX)**2)/2.D0)
01369 ELSEIF (ME.EQ.2) THEN
01370 YY=0.5D0*(1.D0-XPHOTO/XPHMAX+1.D0/(1.D0-XPHOTO/XPHMAX))
01371 WT3=1.D0
01372 ELSEIF ((ME.EQ.3).OR.(ME.EQ.4).OR.(ME.EQ.5)) THEN
01373 YY=1.D0
01374 WT3=(1.D0+(1.D0-XPHOTO/XPHMAX)**2-(XPHOTO/XPHMAX)**3)/
01375 & (1.D0+(1.D0-XPHOTO/XPHMAX)** 2)
01376 ELSE
01377 DATA=(ME-1.D0)/2.D0
01378 CALL PHOERR(6,'PHOCOR',DATA)
01379 YY=1.D0
01380 WT3=1.D0
01381 ENDIF
01382 BETA=SQRT(1.D0-XX)
01383 WT1=(1.D0-COSTHG*SQRT(1.D0-MCHREN))/(1.D0-COSTHG*BETA)
01384 WT2=(1.D0-XX/YY/(1.D0-BETA**2*COSTHG**2))*(1.D0+COSTHG*BETA)/2.D0
01385
01386 CALL ME_SCALAR(IscaNLO)
01387 IF (ME.EQ.1.AND.IscaNLO.EQ.1) THEN
01388
01389
01390 PHOCOR=PHOCORN(MPASQR,MCHREN,ME)
01391 wt1=1.0
01392 wt2=1.0
01393 wt3=PHOCOR
01394 ELSE
01395 WT2=WT2*PHOFAC(1)
01396 ENDIF
01397 PHOCOR=WT1*WT2*WT3
01398
01399 CORWT=PHOCOR
01400 IF (PHOCOR.GT.1.D0) THEN
01401 DATA=PHOCOR
01402 CALL PHOERR(3,'PHOCOR',DATA)
01403 ENDIF
01404 RETURN
01405 END
01406 FUNCTION PHOFAC(MODE)
01407
01408
01409
01410
01411
01412
01413
01414
01415
01416
01417
01418
01419
01420
01421
01422
01423
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433
01434
01435
01436 IMPLICIT NONE
01437 REAL*8 PHOFAC,FF,PRX
01438 INTEGER MODE
01439 INTEGER IREP
01440 REAL*8 PROBH,CORWT,XF
01441 COMMON/PHOPRO/PROBH,CORWT,XF,IREP
01442 LOGICAL INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
01443 REAL*8 FINT,FSEC,EXPEPS
01444 COMMON /PHOKEY/ FSEC,FINT,EXPEPS,INTERF,ISEC,ITRE,IEXP,IFTOP,IFW
01445 SAVE PRX,FF
01446 DATA PRX,FF/ 0.D0, 0.D0/
01447 IF (IEXP) THEN
01448 PHOFAC=1
01449 RETURN
01450 ENDIF
01451 IF (MODE.EQ.-1) THEN
01452 PRX=1.D0
01453 FF=1.D0
01454 PROBH=0.0
01455 ELSEIF (MODE.EQ.0) THEN
01456 IF (IREP.EQ.0) PRX=1.D0
01457 PRX=PRX/(1.D0-PROBH)
01458 FF=1.D0
01459
01460
01461
01462
01463
01464
01465 PHOFAC=FF*PRX
01466 ELSE
01467 PHOFAC=1.D0/FF
01468 ENDIF
01469 END
01470 SUBROUTINE PHOBW(WT)
01471
01472
01473
01474
01475
01476
01477
01478
01479
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491
01492
01493 IMPLICIT NONE
01494 DOUBLE PRECISION WT
01495 INTEGER NMXPHO
01496 PARAMETER (NMXPHO=10000)
01497 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
01498 REAL*8 PPHO,VPHO
01499 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
01500 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
01501 INTEGER I
01502 DOUBLE PRECISION EMU,MCHREN,BETA,COSTHG,MPASQR,XPH
01503
01504 IF (ABS(IDPHO(1)).EQ.24.AND.
01505 $ ABS(IDPHO(JDAPHO(1,1) )).GE.11.AND.
01506 $ ABS(IDPHO(JDAPHO(1,1) )).LE.16.AND.
01507 $ ABS(IDPHO(JDAPHO(1,1)+1)).GE.11.AND.
01508 $ ABS(IDPHO(JDAPHO(1,1)+1)).LE.16 ) THEN
01509
01510 IF(
01511 $ ABS(IDPHO(JDAPHO(1,1) )).EQ.11.OR.
01512 $ ABS(IDPHO(JDAPHO(1,1) )).EQ.13.OR.
01513 $ ABS(IDPHO(JDAPHO(1,1) )).EQ.15 ) THEN
01514 I=JDAPHO(1,1)
01515 ELSE
01516 I=JDAPHO(1,1)+1
01517 ENDIF
01518 EMU=PPHO(4,I)
01519 MCHREN=ABS(PPHO(4,I)**2-PPHO(3,I)**2
01520 $ -PPHO(2,I)**2-PPHO(1,I)**2)
01521 BETA=SQRT(1- MCHREN/ PPHO(4,I)**2)
01522 COSTHG=(PPHO(3,I)*PPHO(3,NPHO)+PPHO(2,I)*PPHO(2,NPHO)
01523 $ +PPHO(1,I)*PPHO(1,NPHO))/
01524 $ SQRT(PPHO(3,I)**2+PPHO(2,I)**2+PPHO(1,I)**2) /
01525 $ SQRT(PPHO(3,NPHO)**2+PPHO(2,NPHO)**2+PPHO(1,NPHO)**2)
01526 MPASQR=PPHO(4,1)**2
01527 XPH=PPHO(4,NPHO)
01528 WT=WT*(1-8*EMU*XPH*(1-COSTHG*BETA)*
01529 $ (MCHREN+2*XPH*SQRT(MPASQR))/
01530 $ MPASQR**2/(1-MCHREN/MPASQR)/(4-MCHREN/MPASQR))
01531 ENDIF
01532
01533
01534
01535 END
01536 SUBROUTINE PHODO(IP,NCHARB,NEUDAU)
01537
01538
01539
01540
01541
01542
01543
01544
01545
01546
01547
01548
01549
01550
01551
01552
01553
01554
01555
01556
01557
01558
01559 IMPLICIT NONE
01560 DOUBLE PRECISION PHOAN1,PHOAN2,ANGLE,FI1,FI3,FI4,FI5,TH1,TH3,TH4
01561 DOUBLE PRECISION PARNE,QNEW,QOLD,DATA
01562 INTEGER IP,FI3DUM,I,J,NEUDAU,FIRST,LAST
01563 INTEGER NCHARB
01564 REAL*8 EPHOTO,PMAVIR,PHOTRI
01565 REAL*8 GNEUT,PHORANC,CCOSTH,SSINTH,PVEC(4)
01566 INTEGER NMXPHO
01567 PARAMETER (NMXPHO=10000)
01568 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
01569 REAL*8 PPHO,VPHO
01570 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
01571 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
01572 DOUBLE PRECISION MCHSQR,MNESQR
01573 REAL*8 PNEUTR
01574 COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
01575 DOUBLE PRECISION COSTHG,SINTHG
01576 REAL*8 XPHMAX,XPHOTO
01577 COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
01578 REAL*8 PI,TWOPI
01579 COMMON/PHPICO/PI,TWOPI
01580
01581 COMMON /PHOREST/ FI3,fi1,th1
01582
01583 EPHOTO=XPHOTO*PPHO(5,IP)/2.D0
01584 PMAVIR=SQRT(PPHO(5,IP)*(PPHO(5,IP)-2.D0*EPHOTO))
01585
01586
01587 FI1=PHOAN1(PNEUTR(1),PNEUTR(2))
01588
01589
01590
01591 TH1=PHOAN2(PNEUTR(3),SQRT(PNEUTR(1)**2+PNEUTR(2)**2))
01592 CALL PHORO3(-FI1,PNEUTR(1))
01593 CALL PHORO2(-TH1,PNEUTR(1))
01594
01595
01596
01597
01598
01599
01600
01601 QNEW=PHOTRI(PMAVIR,PNEUTR(5),PPHO(5,NCHARB))
01602 QOLD=PNEUTR(3)
01603 GNEUT=(QNEW**2+QOLD**2+MNESQR)/(QNEW*QOLD+SQRT((QNEW**2+MNESQR)*
01604 &(QOLD**2+MNESQR)))
01605 IF (GNEUT.LT.1.D0) THEN
01606 DATA=0.D0
01607 CALL PHOERR(4,'PHOKIN',DATA)
01608 ENDIF
01609 PARNE=GNEUT-SQRT(MAX(GNEUT**2-1.0D0,0.D0))
01610
01611
01612 CALL PHOBO3(PARNE,PNEUTR)
01613
01614
01615 NPHO=NPHO+1
01616 ISTPHO(NPHO)=1
01617 IDPHO(NPHO) =22
01618
01619 JMOPHO(1,NPHO)=IP
01620 JMOPHO(2,NPHO)=0
01621 JDAPHO(1,NPHO)=0
01622 JDAPHO(2,NPHO)=0
01623 PPHO(4,NPHO)=EPHOTO*PPHO(5,IP)/PMAVIR
01624
01625
01626 CCOSTH=-COSTHG
01627 SSINTH=SINTHG
01628 TH3=PHOAN2(CCOSTH,SSINTH)
01629 FI3=TWOPI*PHORANC(FI3DUM)
01630 PPHO(1,NPHO)=PPHO(4,NPHO)*SINTHG*COS(FI3)
01631 PPHO(2,NPHO)=PPHO(4,NPHO)*SINTHG*SIN(FI3)
01632
01633
01634 PPHO(3,NPHO)=-PPHO(4,NPHO)*COSTHG
01635 PPHO(5,NPHO)=0.D0
01636
01637
01638 CALL PHORO3(-FI3,PNEUTR(1))
01639 CALL PHORO3(-FI3,PPHO(1,NPHO))
01640 CALL PHORO2(-TH3,PNEUTR(1))
01641 CALL PHORO2(-TH3,PPHO(1,NPHO))
01642 ANGLE=EPHOTO/PPHO(4,NPHO)
01643
01644
01645 CALL PHOBO3(ANGLE,PNEUTR(1))
01646 CALL PHOBO3(ANGLE,PPHO(1,NPHO))
01647
01648
01649 FI4=PHOAN1(PNEUTR(1),PNEUTR(2))
01650 TH4=PHOAN2(PNEUTR(3),SQRT(PNEUTR(1)**2+PNEUTR(2)**2))
01651 CALL PHORO3(FI4,PNEUTR(1))
01652 CALL PHORO3(FI4,PPHO(1,NPHO))
01653
01654 DO 60 I=2,4
01655 60 PVEC(I)=0.D0
01656 PVEC(1)=1.D0
01657 CALL PHORO3(-FI3,PVEC)
01658 CALL PHORO2(-TH3,PVEC)
01659 CALL PHOBO3(ANGLE,PVEC)
01660 CALL PHORO3(FI4,PVEC)
01661 CALL PHORO2(-TH4,PNEUTR)
01662 CALL PHORO2(-TH4,PPHO(1,NPHO))
01663 CALL PHORO2(-TH4,PVEC)
01664 FI5=PHOAN1(PVEC(1),PVEC(2))
01665
01666
01667 CALL PHORO3(-FI5,PNEUTR)
01668 CALL PHORO3(-FI5,PPHO(1,NPHO))
01669 CALL PHORO2(TH1,PNEUTR(1))
01670 CALL PHORO2(TH1,PPHO(1,NPHO))
01671 CALL PHORO3(FI1,PNEUTR)
01672 CALL PHORO3(FI1,PPHO(1,NPHO))
01673
01674 IF ((JDAPHO(2,IP)-JDAPHO(1,IP)).GT.1) THEN
01675
01676
01677 FIRST=NEUDAU
01678 LAST=JDAPHO(2,IP)
01679 DO 70 I=FIRST,LAST
01680 IF (I.NE.NCHARB.AND.(JMOPHO(1,I).EQ.IP)) THEN
01681
01682
01683 CALL PHORO3(-FI1,PPHO(1,I))
01684 CALL PHORO2(-TH1,PPHO(1,I))
01685
01686
01687 CALL PHOBO3(PARNE,PPHO(1,I))
01688
01689
01690 CALL PHORO3(-FI3,PPHO(1,I))
01691 CALL PHORO2(-TH3,PPHO(1,I))
01692
01693
01694 CALL PHOBO3(ANGLE,PPHO(1,I))
01695
01696
01697 CALL PHORO3(FI4,PPHO(1,I))
01698 CALL PHORO2(-TH4,PPHO(1,I))
01699
01700
01701 CALL PHORO3(-FI5,PPHO(1,I))
01702 CALL PHORO2(TH1,PPHO(1,I))
01703 CALL PHORO3(FI1,PPHO(1,I))
01704 ENDIF
01705 70 CONTINUE
01706 ELSE
01707
01708
01709 DO 80 J=1,4
01710 80 PPHO(J,NEUDAU)=PNEUTR(J)
01711 ENDIF
01712
01713
01714 DO 90 J=1,3
01715 90 PPHO(J,NCHARB)=-(PPHO(J,NPHO)+PNEUTR(J))
01716 PPHO(4,NCHARB)=PPHO(5,IP)-(PPHO(4,NPHO)+PNEUTR(4))
01717
01718 END
01719 FUNCTION PHOTRI(A,B,C)
01720
01721
01722
01723
01724
01725
01726
01727
01728
01729
01730
01731
01732
01733
01734
01735 IMPLICIT NONE
01736 DOUBLE PRECISION DA,DB,DC,DAPB,DAMB,DTRIAN
01737 REAL*8 A,B,C,PHOTRI
01738 DA=A
01739 DB=B
01740 DC=C
01741 DAPB=DA+DB
01742 DAMB=DA-DB
01743 DTRIAN=SQRT((DAMB-DC)*(DAPB+DC)*(DAMB+DC)*(DAPB-DC))
01744 PHOTRI=DTRIAN/(DA+DA)
01745 RETURN
01746 END
01747 FUNCTION PHOAN1(X,Y)
01748
01749
01750
01751
01752
01753
01754
01755
01756
01757
01758
01759
01760
01761
01762 IMPLICIT NONE
01763 DOUBLE PRECISION PHOAN1
01764 REAL*8 X,Y
01765 REAL*8 PI,TWOPI
01766 COMMON/PHPICO/PI,TWOPI
01767 IF (ABS(Y).LT.ABS(X)) THEN
01768 PHOAN1=ATAN(ABS(Y/X))
01769 IF (X.LE.0.D0) PHOAN1=PI-PHOAN1
01770 ELSE
01771 PHOAN1=ACOS(X/SQRT(X**2+Y**2))
01772 ENDIF
01773 IF (Y.LT.0.D0) PHOAN1=TWOPI-PHOAN1
01774 RETURN
01775 END
01776 FUNCTION PHOAN2(X,Y)
01777
01778
01779
01780
01781
01782
01783
01784
01785
01786
01787
01788
01789
01790
01791 IMPLICIT NONE
01792 DOUBLE PRECISION PHOAN2
01793 REAL*8 X,Y
01794 REAL*8 PI,TWOPI
01795 COMMON/PHPICO/PI,TWOPI
01796 IF (ABS(Y).LT.ABS(X)) THEN
01797 PHOAN2=ATAN(ABS(Y/X))
01798 IF (X.LE.0.D0) PHOAN2=PI-PHOAN2
01799 ELSE
01800 PHOAN2=ACOS(X/SQRT(X**2+Y**2))
01801 ENDIF
01802 RETURN
01803 END
01804 SUBROUTINE PHOBO3(ANGLE,PVEC)
01805
01806
01807
01808
01809
01810
01811
01812
01813
01814
01815
01816
01817
01818
01819
01820 IMPLICIT NONE
01821 DOUBLE PRECISION QPL,QMI,ANGLE
01822 REAL*8 PVEC(4)
01823 QPL=(PVEC(4)+PVEC(3))*ANGLE
01824 QMI=(PVEC(4)-PVEC(3))/ANGLE
01825 PVEC(3)=(QPL-QMI)/2.D0
01826 PVEC(4)=(QPL+QMI)/2.D0
01827 RETURN
01828 END
01829 SUBROUTINE PHORO2(ANGLE,PVEC)
01830
01831
01832
01833
01834
01835
01836
01837
01838
01839
01840
01841
01842
01843
01844
01845 IMPLICIT NONE
01846 DOUBLE PRECISION CS,SN,ANGLE
01847 REAL*8 PVEC(4)
01848 CS=COS(ANGLE)*PVEC(1)+SIN(ANGLE)*PVEC(3)
01849 SN=-SIN(ANGLE)*PVEC(1)+COS(ANGLE)*PVEC(3)
01850 PVEC(1)=CS
01851 PVEC(3)=SN
01852 RETURN
01853 END
01854 SUBROUTINE PHORO3(ANGLE,PVEC)
01855
01856
01857
01858
01859
01860
01861
01862
01863
01864
01865
01866
01867
01868
01869
01870 IMPLICIT NONE
01871 DOUBLE PRECISION CS,SN,ANGLE
01872 REAL*8 PVEC(4)
01873 CS=COS(ANGLE)*PVEC(1)-SIN(ANGLE)*PVEC(2)
01874 SN=SIN(ANGLE)*PVEC(1)+COS(ANGLE)*PVEC(2)
01875 PVEC(1)=CS
01876 PVEC(2)=SN
01877 RETURN
01878 END
01879 FUNCTION PHOCHA(IDHEP)
01880
01881
01882
01883
01884
01885
01886
01887
01888
01889
01890
01891
01892
01893
01894
01895
01896
01897 IMPLICIT NONE
01898 REAL*8 PHOCHA
01899 INTEGER IDHEP,IDABS,Q1,Q2,Q3
01900
01901
01902
01903 REAL*8 CHARGE(0:100)
01904 DATA CHARGE/ 0.D0,
01905 &-0.3333333333D0, 0.6666666667D0, -0.3333333333D0, 0.6666666667D0,
01906 &-0.3333333333D0, 0.6666666667D0, -0.3333333333D0, 0.6666666667D0,
01907 & 2*0.D0, -1.D0, 0.D0, -1.D0, 0.D0, -1.D0, 0.D0, -1.D0, 6*0.D0,
01908 & 1.D0, 12*0.D0, 1.D0, 63*0.D0/
01909 IDABS=ABS(IDHEP)
01910 IF (IDABS.LE.100) THEN
01911
01912
01913 PHOCHA = CHARGE(IDABS)
01914 ELSE
01915
01916
01917 Q3=MOD(IDABS/1000,10)
01918 Q2=MOD(IDABS/100,10)
01919 Q1=MOD(IDABS/10,10)
01920 IF (Q3.EQ.0) THEN
01921
01922
01923 IF(MOD(Q2,2).EQ.0) THEN
01924 PHOCHA=CHARGE(Q2)-CHARGE(Q1)
01925 ELSE
01926 PHOCHA=CHARGE(Q1)-CHARGE(Q2)
01927 ENDIF
01928 ELSE
01929
01930
01931 PHOCHA=CHARGE(Q1)+CHARGE(Q2)+CHARGE(Q3)
01932 ENDIF
01933 ENDIF
01934
01935
01936 IF (IDHEP.LT.0.D0) PHOCHA=-PHOCHA
01937 IF (PHOCHA**2.lt.1d-6) PHOCHA=0.D0
01938 RETURN
01939 END
01940 FUNCTION PHOSPI(IDHEP)
01941
01942
01943
01944
01945
01946
01947
01948
01949
01950
01951
01952
01953
01954
01955
01956
01957
01958
01959 IMPLICIT NONE
01960 REAL*8 PHOSPI
01961 INTEGER IDHEP,IDABS
01962
01963
01964
01965 REAL*8 SPIN(100)
01966 DATA SPIN/ 8*.5D0, 1.D0, 0.D0, 8*.5D0, 2*0.D0, 4*1.D0, 76*0.D0/
01967 IDABS=ABS(IDHEP)
01968
01969
01970 IF (IDABS.LE.100) THEN
01971 PHOSPI=SPIN(IDABS)
01972 ELSE
01973
01974
01975 PHOSPI=(MOD(IDABS,10)-1.D0)/2.D0
01976
01977
01978 PHOSPI=MAX(PHOSPI,0.D0)
01979 ENDIF
01980 RETURN
01981 END
01982 SUBROUTINE PHOERR(IMES,TEXT,DATA)
01983
01984
01985
01986
01987
01988
01989
01990
01991
01992
01993
01994
01995
01996
01997
01998 IMPLICIT NONE
01999 DOUBLE PRECISION DATA
02000 INTEGER IMES,IERROR
02001 REAL*8 SDATA
02002 INTEGER PHLUN
02003 COMMON/PHOLUN/PHLUN
02004 INTEGER PHOMES
02005 PARAMETER (PHOMES=10)
02006 INTEGER STATUS
02007 LOGICAL IFSTOP
02008 COMMON/PHOSTA/STATUS(PHOMES),IFSTOP
02009
02010 CHARACTER TEXT*(*)
02011 SAVE IERROR
02012
02013 DATA IERROR/ 0/
02014
02015 IF (IMES.LE.PHOMES) STATUS(IMES)=STATUS(IMES)+1
02016
02017
02018 IF ((IMES.EQ. 6).AND.(STATUS(IMES).GE.2)) RETURN
02019 IF ((IMES.EQ.10).AND.(STATUS(IMES).GE.2)) RETURN
02020 SDATA=DATA
02021 WRITE(PHLUN,9000)
02022 WRITE(PHLUN,9120)
02023 GOTO (10,20,30,40,50,60,70,80,90,100),IMES
02024 WRITE(PHLUN,9130) IMES
02025 GOTO 120
02026 10 WRITE(PHLUN,9010) TEXT,INT(SDATA)
02027 GOTO 110
02028 20 WRITE(PHLUN,9020) TEXT,SDATA
02029 GOTO 110
02030 30 WRITE(PHLUN,9030) TEXT,SDATA
02031 GOTO 110
02032 40 WRITE(PHLUN,9040) TEXT
02033 GOTO 110
02034 50 WRITE(PHLUN,9050) TEXT,INT(SDATA)
02035 GOTO 110
02036 60 WRITE(PHLUN,9060) TEXT,SDATA
02037 GOTO 130
02038 70 WRITE(PHLUN,9070) TEXT,INT(SDATA)
02039 GOTO 110
02040 80 WRITE(PHLUN,9080) TEXT,INT(SDATA)
02041 GOTO 110
02042 90 WRITE(PHLUN,9090) TEXT,INT(SDATA)
02043 GOTO 110
02044 100 WRITE(PHLUN,9100) TEXT,SDATA
02045 GOTO 130
02046 110 CONTINUE
02047 WRITE(PHLUN,9140)
02048 WRITE(PHLUN,9120)
02049 WRITE(PHLUN,9000)
02050 IF (IFSTOP) THEN
02051 STOP
02052 ELSE
02053 GOTO 130
02054 ENDIF
02055 120 IERROR=IERROR+1
02056 IF (IERROR.GE.10) THEN
02057 WRITE(PHLUN,9150)
02058 WRITE(PHLUN,9120)
02059 WRITE(PHLUN,9000)
02060 IF (IFSTOP) THEN
02061 STOP
02062 ELSE
02063 GOTO 130
02064 ENDIF
02065 ENDIF
02066 130 WRITE(PHLUN,9120)
02067 WRITE(PHLUN,9000)
02068 RETURN
02069 9000 FORMAT(1H ,80('*'))
02070 9010 FORMAT(1H ,'* ',A,': Too many charged Particles, NCHARG =',I6,T81,
02071 &'*')
02072 9020 FORMAT(1H ,'* ',A,': Too much Bremsstrahlung required, PRSOFT = ',
02073 &F15.6,T81,'*')
02074 9030 FORMAT(1H ,'* ',A,': Combined Weight is exceeding 1., Weight = ',
02075 &F15.6,T81,'*')
02076 9040 FORMAT(1H ,'* ',A,
02077 &': Error in Rescaling charged and neutral Vectors',T81,'*')
02078 9050 FORMAT(1H ,'* ',A,
02079 &': Non matching charged Particle Pointer, NCHARG = ',I5,T81,'*')
02080 9060 FORMAT(1H ,'* ',A,
02081 &': Do you really work with a Particle of Spin: ',F4.1,' ?',T81,
02082 &'*')
02083 9070 FORMAT(1H ,'* ',A, ': Stack Length exceeded, NSTACK = ',I5 ,T81,
02084 &'*')
02085 9080 FORMAT(1H ,'* ',A,
02086 &': Random Number Generator Seed(1) out of Range: ',I8,T81,'*')
02087 9090 FORMAT(1H ,'* ',A,
02088 &': Random Number Generator Seed(2) out of Range: ',I8,T81,'*')
02089 9100 FORMAT(1H ,'* ',A,
02090 &': Available Phase Space below Cut-off: ',F15.6,' GeV/c^2',T81,
02091 &'*')
02092 9120 FORMAT(1H ,'*',T81,'*')
02093 9130 FORMAT(1H ,'* Funny Error Message: ',I4,' ! What to do ?',T81,'*')
02094 9140 FORMAT(1H ,'* Fatal Error Message, I stop this Run !',T81,'*')
02095 9150 FORMAT(1H ,'* 10 Error Messages generated, I stop this Run !',T81,
02096 &'*')
02097 END
02098 SUBROUTINE PHOREP
02099
02100
02101
02102
02103
02104
02105
02106
02107
02108
02109
02110
02111
02112
02113
02114 IMPLICIT NONE
02115 INTEGER PHLUN
02116 COMMON/PHOLUN/PHLUN
02117 INTEGER PHOMES
02118 PARAMETER (PHOMES=10)
02119 INTEGER STATUS
02120 LOGICAL IFSTOP
02121 COMMON/PHOSTA/STATUS(PHOMES),IFSTOP
02122 INTEGER I
02123 LOGICAL ERROR
02124 ERROR=.FALSE.
02125 WRITE(PHLUN,9000)
02126 WRITE(PHLUN,9010)
02127 WRITE(PHLUN,9020)
02128 WRITE(PHLUN,9030)
02129 WRITE(PHLUN,9040)
02130 WRITE(PHLUN,9030)
02131 WRITE(PHLUN,9020)
02132 DO 10 I=1,PHOMES
02133 IF (STATUS(I).EQ.0) GOTO 10
02134 IF ((I.EQ.6).OR.(I.EQ.10)) THEN
02135 WRITE(PHLUN,9050) I,STATUS(I)
02136 ELSE
02137 ERROR=.TRUE.
02138 WRITE(PHLUN,9060) I,STATUS(I)
02139 ENDIF
02140 10 CONTINUE
02141 IF (.NOT.ERROR) WRITE(PHLUN,9070)
02142 WRITE(PHLUN,9020)
02143 WRITE(PHLUN,9010)
02144 RETURN
02145 9000 FORMAT(1H1)
02146 9010 FORMAT(1H ,80('*'))
02147 9020 FORMAT(1H ,'*',T81,'*')
02148 9030 FORMAT(1H ,'*',26X,25('='),T81,'*')
02149 9040 FORMAT(1H ,'*',30X,'PHOTOS Run Summary',T81,'*')
02150 9050 FORMAT(1H ,'*',22X,'Warning #',I2,' occured',I6,' times',T81,'*')
02151 9060 FORMAT(1H ,'*',23X,'Error #',I2,' occured',I6,' times',T81,'*')
02152 9070 FORMAT(1H ,'*',16X,'PHOTOS Execution has successfully terminated',
02153 &T81,'*')
02154 END
02155 SUBROUTINE PHLUPA(IPOINT)
02156 IMPLICIT NONE
02157
02158
02159
02160
02161
02162
02163
02164
02165
02166
02167
02168
02169
02170
02171
02172
02173 INTEGER NMXPHO
02174 PARAMETER (NMXPHO=10000)
02175 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO,I,J,IPOINT
02176 INTEGER IPOIN,IPOIN0,IPOINM,IEV
02177 INTEGER IOUT
02178 REAL*8 PPHO,VPHO,SUM
02179 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
02180 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
02181 COMMON /PHNUM/ IEV
02182 INTEGER PHLUN
02183 COMMON/PHOLUN/PHLUN
02184 DIMENSION SUM(5)
02185 DATA IPOIN0/ -5/
02186 COMMON /PHLUPY/ IPOIN,IPOINM
02187 SAVE IPOIN0
02188 IF (IPOIN0.LT.0) THEN
02189 IPOIN0=400 000
02190 IPOIN =IPOIN0
02191 IPOINM=400 001
02192 ENDIF
02193 IF (IPOINT.LE.IPOINM.OR.IPOINT.GE.IPOIN ) RETURN
02194 IOUT=56
02195 IF (IEV.LT.1000) THEN
02196 DO I=1,5
02197 SUM(I)=0.0D0
02198 ENDDO
02199 WRITE(PHLUN,*) 'EVENT NR=',IEV,
02200 $ 'WE ARE TESTING /PHOEVT/ at IPOINT=',IPOINT
02201 WRITE(PHLUN,10)
02202 I=1
02203 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
02204 $ PPHO(4,I),PPHO(5,I),JDAPHO(1,I),JDAPHO(2,I)
02205 I=2
02206 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
02207 $ PPHO(4,I),PPHO(5,I),JDAPHO(1,I),JDAPHO(2,I)
02208 WRITE(PHLUN,*) ' '
02209 DO I=3,NPHO
02210 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
02211 $ PPHO(4,I),PPHO(5,I),JMOPHO(1,I),JMOPHO(2,I)
02212 DO J=1,4
02213 SUM(J)=SUM(J)+PPHO(J,I)
02214 ENDDO
02215 ENDDO
02216 SUM(5)=SQRT(ABS(SUM(4)**2-SUM(1)**2-SUM(2)**2-SUM(3)**2))
02217 WRITE(PHLUN,30) SUM
02218 10 FORMAT(1X,' ID ','p_x ','p_y ','p_z ',
02219 $ 'E ','m ',
02220 $ 'ID-MO_DA1','ID-MO DA2' )
02221 20 FORMAT(1X,I4,5(F14.9),2I9)
02222 30 FORMAT(1X,' SUM',5(F14.9))
02223 ENDIF
02224 END
02225
02226
02227
02228 FUNCTION IPHQRK(MODCOR)
02229 implicit none
02230
02231
02232
02233
02234
02235
02236
02237
02238
02239
02240
02241
02242
02243
02244
02245 INTEGER IPHQRK,MODCOR,MODOP
02246 INTEGER PHLUN
02247 COMMON/PHOLUN/PHLUN
02248
02249 SAVE MODOP
02250 DATA MODOP /0/
02251 IF (MODCOR.NE.0) THEN
02252
02253 MODOP=MODCOR
02254
02255 WRITE(PHLUN,*)
02256 $ 'Message from PHOTOS: IPHQRK(MODCOR):: (re)initialization'
02257 IF (MODOP.EQ.1) THEN
02258 WRITE(PHLUN,*)
02259 $ 'MODOP=1 -- blocks emission from light quarks: DEFAULT'
02260 ELSEIF (MODOP.EQ.2) THEN
02261 WRITE(PHLUN,*)
02262 $ 'MODOP=2 -- enables emission from light quarks: TEST '
02263 ELSE
02264 WRITE(PHLUN,*) 'IPHQRK wrong MODCOR=',MODCOR
02265 STOP
02266 ENDIF
02267 RETURN
02268 ENDIF
02269
02270 IF (MODOP.EQ.0.AND.MODCOR.EQ.0) THEN
02271 WRITE(PHLUN,*) 'IPHQRK lack of initialization'
02272 STOP
02273 ENDIF
02274 IPHQRK=MODOP
02275 END
02276
02277
02278 FUNCTION IPHEKL(MODCOR)
02279 implicit none
02280
02281
02282
02283
02284
02285
02286
02287
02288
02289
02290
02291
02292
02293
02294
02295 INTEGER IPHEKL,MODCOR,MODOP
02296 INTEGER PHLUN
02297 COMMON/PHOLUN/PHLUN
02298
02299 SAVE MODOP
02300 DATA MODOP /0/
02301
02302 IF (MODCOR.NE.0) THEN
02303
02304 MODOP=MODCOR
02305
02306 WRITE(PHLUN,*)
02307 $ 'Message from PHOTOS: IPHEKL(MODCOR):: (re)initialization'
02308 IF (MODOP.EQ.2) THEN
02309 WRITE(PHLUN,*)
02310 $ 'MODOP=2 -- blocks emission in pi0 to gamma e+e-: DEFAULT'
02311 WRITE(PHLUN,*)
02312 $ 'MODOP=2 -- blocks emission in Kl to gamma e+e-: DEFAULT'
02313 ELSEIF (MODOP.EQ.1) THEN
02314 WRITE(PHLUN,*)
02315 $ 'MODOP=1 -- enables emission in pi0 to gamma e+e- : TEST '
02316 WRITE(PHLUN,*)
02317 $ 'MODOP=1 -- enables emission in Kl to gamma e+e- : TEST '
02318 ELSE
02319 WRITE(PHLUN,*) 'IPHEKL wrong MODCOR=',MODCOR
02320 STOP
02321 ENDIF
02322 RETURN
02323 ENDIF
02324
02325 IF (MODOP.EQ.0.AND.MODCOR.EQ.0) THEN
02326 WRITE(PHLUN,*) 'IPHELK lack of initialization'
02327 STOP
02328 ENDIF
02329 IPHEKL=MODOP
02330 END
02331
02332 SUBROUTINE PHCORK(MODCOR)
02333 implicit none
02334
02335
02336
02337
02338
02339
02340
02341
02342
02343
02344
02345
02346
02347
02348
02349
02350
02351
02352
02353
02354
02355
02356 INTEGER NMXPHO
02357 PARAMETER (NMXPHO=10000)
02358
02359 REAL*8 M,P2,PX,PY,PZ,E,EN,MCUT,XMS
02360 INTEGER MODCOR,MODOP,I,IEV,IPRINT,K
02361 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
02362 REAL*8 PPHO,VPHO
02363 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
02364 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
02365
02366 INTEGER PHLUN
02367 COMMON/PHOLUN/PHLUN
02368
02369 COMMON /PHNUM/ IEV
02370 SAVE MODOP
02371 DATA MODOP /0/
02372 SAVE IPRINT
02373 DATA IPRINT /0/
02374 SAVE MCUT
02375 IF (MODCOR.NE.0) THEN
02376
02377 MODOP=MODCOR
02378
02379 WRITE(PHLUN,*) 'Message from PHCORK(MODCOR):: initialization'
02380 IF (MODOP.EQ.1) THEN
02381 WRITE(PHLUN,*) 'MODOP=1 -- no corrections on event: DEFAULT'
02382 ELSEIF (MODOP.EQ.2) THEN
02383 WRITE(PHLUN,*) 'MODOP=2 -- corrects Energy from mass'
02384 ELSEIF (MODOP.EQ.3) THEN
02385 WRITE(PHLUN,*) 'MODOP=3 -- corrects mass from Energy'
02386 ELSEIF (MODOP.EQ.4) THEN
02387 WRITE(PHLUN,*) 'MODOP=4 -- corrects Energy from mass to Mcut'
02388 WRITE(PHLUN,*) ' and mass from energy above Mcut '
02389 MCUT=0.4
02390 WRITE(PHLUN,*) 'Mcut=',MCUT,'GeV'
02391 ELSEIF (MODOP.EQ.5) THEN
02392 WRITE(PHLUN,*) 'MODOP=5 -- corrects Energy from mass+flow'
02393
02394 ELSE
02395 WRITE(PHLUN,*) 'PHCORK wrong MODCOR=',MODCOR
02396 STOP
02397 ENDIF
02398 RETURN
02399 ENDIF
02400
02401 IF (MODOP.EQ.0.AND.MODCOR.EQ.0) THEN
02402 WRITE(PHLUN,*) 'PHCORK lack of initialization'
02403 STOP
02404 ENDIF
02405
02406
02407
02408
02409
02410
02411 PX=0
02412 PY=0
02413 PZ=0
02414 E =0
02415
02416 IF (MODOP.EQ.1) THEN
02417
02418
02419 RETURN
02420 ELSEIF(MODOP.EQ.2) THEN
02421
02422
02423
02424
02425 DO I=3,NPHO
02426
02427 PX=PX+PPHO(1,I)
02428 PY=PY+PPHO(2,I)
02429 PZ=PZ+PPHO(3,I)
02430
02431 P2=PPHO(1,I)**2+PPHO(2,I)**2+PPHO(3,I)**2
02432
02433 EN=SQRT( PPHO(5,I)**2 + P2)
02434
02435 IF (IPRINT.EQ.1)
02436 & WRITE(PHLUN,*) "CORRECTING ENERGY OF ",I,":",
02437 & PPHO(4,I),"=>",EN
02438
02439 PPHO(4,I)=EN
02440 E = E+PPHO(4,I)
02441
02442 ENDDO
02443
02444 ELSEIF(MODOP.EQ.5) THEN
02445
02446
02447
02448
02449 DO I=3,NPHO
02450
02451 PX=PX+PPHO(1,I)
02452 PY=PY+PPHO(2,I)
02453 PZ=PZ+PPHO(3,I)
02454
02455 P2=PPHO(1,I)**2+PPHO(2,I)**2+PPHO(3,I)**2
02456
02457 EN=SQRT( PPHO(5,I)**2 + P2)
02458
02459 IF (IPRINT.EQ.1)
02460 & WRITE(PHLUN,*) "CORRECTING ENERGY OF ",I,":",
02461 & PPHO(4,I),"=>",EN
02462
02463 PPHO(4,I)=EN
02464 E = E+PPHO(4,I)
02465
02466 ENDDO
02467 DO K=1,4
02468 PPHO(K,1)=0d0
02469 DO I=3,NPHO
02470 PPHO(K,1)=PPHO(K,1)+PPHO(K,I)
02471 ENDDO
02472 ENDDO
02473 XMS=SQRT(PPHO(4,1)**2-PPHO(3,1)**2-PPHO(2,1)**2-PPHO(1,1)**2)
02474 PPHO(5,1)=XMS
02475 ELSEIF(MODOP.EQ.3) THEN
02476
02477
02478
02479
02480
02481 DO I=3,NPHO
02482
02483 PX=PX+PPHO(1,I)
02484 PY=PY+PPHO(2,I)
02485 PZ=PZ+PPHO(3,I)
02486 E = E+PPHO(4,I)
02487
02488 P2=PPHO(1,I)**2+PPHO(2,I)**2+PPHO(3,I)**2
02489
02490 M=SQRT(ABS( PPHO(4,I)**2 - P2))
02491
02492 IF (IPRINT.EQ.1)
02493 & WRITE(PHLUN,*) "CORRECTING MASS OF ",I,":",
02494 & PPHO(5,I),"=>",M
02495
02496 PPHO(5,I)=M
02497
02498 ENDDO
02499
02500
02501 ELSEIF(MODOP.EQ.4) THEN
02502
02503
02504
02505
02506
02507 DO I=3,NPHO
02508
02509 PX=PX+PPHO(1,I)
02510 PY=PY+PPHO(2,I)
02511 PZ=PZ+PPHO(3,I)
02512
02513 P2=PPHO(1,I)**2+PPHO(2,I)**2+PPHO(3,I)**2
02514
02515 M=SQRT(ABS( PPHO(4,I)**2 - P2))
02516
02517 IF (M.GT.MCUT) THEN
02518 IF (IPRINT.EQ.1)
02519 & WRITE(PHLUN,*) "CORRECTING MASS OF ",I,":",
02520 & PPHO(5,I),"=>",M
02521 PPHO(5,I)=M
02522 E = E+PPHO(4,I)
02523 ELSE
02524
02525 EN=SQRT( PPHO(5,I)**2 + P2)
02526
02527 IF (IPRINT.EQ.1)
02528 & WRITE(PHLUN,*) "CORRECTING ENERGY OF ",I,":",
02529 & PPHO(4,I),"=>",EN
02530
02531 PPHO(4,I)=EN
02532 E = E+PPHO(4,I)
02533 ENDIF
02534
02535 ENDDO
02536 ENDIF
02537
02538
02539 IF (IPRINT.EQ.1) THEN
02540 WRITE(PHLUN,*) "CORRECTING MOTHER"
02541 WRITE(PHLUN,*) "PX:",PPHO(1,1),"=>",PX-PPHO(1,2)
02542 WRITE(PHLUN,*) "PY:",PPHO(2,1),"=>",PY-PPHO(2,2)
02543 WRITE(PHLUN,*) "PZ:",PPHO(3,1),"=>",PZ-PPHO(3,2)
02544 WRITE(PHLUN,*) " E:",PPHO(4,1),"=>",E-PPHO(4,2)
02545 ENDIF
02546
02547 PPHO(1,1)=PX-PPHO(1,2)
02548 PPHO(2,1)=PY-PPHO(2,2)
02549 PPHO(3,1)=PZ-PPHO(3,2)
02550 PPHO(4,1)=E -PPHO(4,2)
02551
02552 P2=PPHO(1,1)**2+PPHO(2,1)**2+PPHO(3,1)**2
02553
02554 IF (PPHO(4,1)**2.GT.P2) THEN
02555 M=SQRT( PPHO(4,1)**2 - P2 )
02556 IF (IPRINT.EQ.1)
02557 & WRITE(PHLUN,*) " M:",PPHO(5,1),"=>",M
02558 PPHO(5,1)=M
02559 ENDIF
02560
02561 CALL PHLUPA(25)
02562
02563 END
02564
02565
02566
02567 FUNCTION PHINT(IDUM)
02568
02569
02570
02571
02572
02573
02574
02575
02576
02577
02578
02579
02580
02581
02582
02583
02584 IMPLICIT NONE
02585 REAL*8 PHINT,PHINT2
02586 INTEGER IDUM
02587 INTEGER NMXPHO
02588 PARAMETER (NMXPHO=10000)
02589 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
02590 REAL*8 PPHO,VPHO
02591 COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
02592 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
02593 INTEGER I,K,L
02594 DOUBLE PRECISION EMU,MCHREN,BETA,COSTHG,MPASQR,XPH, XC1, XC2,XDENO
02595 DOUBLE PRECISION XNUM1,XNUM2
02596 DOUBLE PRECISION EPS1(4),EPS2(4),PH(4),PL(4)
02597 REAL*8 PHOCHA
02598
02599
02600
02601
02602 DO K=1,4
02603 PH(K)=PPHO(K,NPHO)
02604 EPS2(K)=1D0
02605 ENDDO
02606
02607 CALL PHOEPS(PH,EPS2,EPS1)
02608 CALL PHOEPS(PH,EPS1,EPS2)
02609
02610
02611 XNUM1=0D0
02612 XNUM2=0D0
02613 XDENO=0D0
02614
02615 DO K=JDAPHO(1,1),NPHO-1
02616
02617
02618 DO L=1,4
02619 PL(L)=PPHO(L,K)
02620 ENDDO
02621
02622
02623 XC1 = - PHOCHA(IDPHO(K)) *
02624 & ( PL(1)*EPS1(1) + PL(2)*EPS1(2) + PL(3)*EPS1(3) ) /
02625 & ( PH(4)*PL(4) - PH(1)*PL(1) - PH(2)*PL(2) - PH(3)*PL(3) )
02626
02627 XC2 = - PHOCHA(IDPHO(K)) *
02628 & ( PL(1)*EPS2(1) + PL(2)*EPS2(2) + PL(3)*EPS2(3) ) /
02629 & ( PH(4)*PL(4) - PH(1)*PL(1) - PH(2)*PL(2) - PH(3)*PL(3) )
02630
02631
02632
02633 XNUM1 = XNUM1+XC1
02634 XNUM2 = XNUM2+XC2
02635
02636 XDENO = XDENO + XC1**2 + XC2**2
02637
02638 ENDDO
02639
02640 PHINT=(XNUM1**2 + XNUM2**2) / XDENO
02641 PHINT2=PHINT
02642
02643 END
02644
02645
02646 SUBROUTINE PHOEPS (VEC1, VEC2, EPS)
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662
02663
02664
02665 DOUBLE PRECISION VEC1(4), VEC2(4), EPS(4),XN
02666
02667 EPS(1)=VEC1(2)*VEC2(3) - VEC1(3)*VEC2(2)
02668 EPS(2)=VEC1(3)*VEC2(1) - VEC1(1)*VEC2(3)
02669 EPS(3)=VEC1(1)*VEC2(2) - VEC1(2)*VEC2(1)
02670 EPS(4)=0D0
02671
02672 XN=SQRT( EPS(1)**2 +EPS(2)**2 +EPS(3)**2)
02673
02674 EPS(1)=EPS(1)/XN
02675 EPS(2)=EPS(2)/XN
02676 EPS(3)=EPS(3)/XN
02677
02678
02679 END
02680 SUBROUTINE PHODMP
02681
02682
02683
02684
02685
02686
02687
02688
02689
02690
02691
02692
02693
02694
02695
02696 DOUBLE PRECISION SUMVEC(5)
02697 INTEGER I,J
02698
02699 INTEGER NMXHEP
02700 PARAMETER (NMXHEP=10000)
02701 REAL*8 phep, vhep
02702 INTEGER nevhep,nhep,isthep,idhep,jmohep,
02703 $ jdahep
02704 COMMON /ph_hepevt/
02705 $ nevhep,
02706 $ nhep,
02707 $ isthep(nmxhep),
02708 $ idhep(nmxhep),
02709 $ jmohep(2,nmxhep),
02710 $ jdahep(2,nmxhep),
02711 $ phep(5,nmxhep),
02712 $ vhep(4,nmxhep)
02713
02714 LOGICAL qedrad
02715 COMMON /phoqed/
02716 $ qedrad(nmxhep)
02717
02718 SAVE ph_hepevt,phoqed
02719 INTEGER PHLUN
02720 COMMON/PHOLUN/PHLUN
02721 DO 10 I=1,5
02722 10 SUMVEC(I)=0.
02723
02724
02725 WRITE(PHLUN,9000)
02726 WRITE(PHLUN,9010) NEVHEP
02727 WRITE(PHLUN,9080)
02728 WRITE(PHLUN,9020)
02729 DO 30 I=1,NHEP
02730
02731
02732 IF (JDAHEP(1,I).EQ.0) THEN
02733 DO 20 J=1,4
02734 20 SUMVEC(J)=SUMVEC(J)+PHEP(J,I)
02735 IF (JMOHEP(2,I).EQ.0) THEN
02736 WRITE(PHLUN,9030) I,IDHEP(I),JMOHEP(1,I),(PHEP(J,I),J=1,5)
02737 ELSE
02738 WRITE(PHLUN,9040) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),(PHEP
02739 & (J,I),J=1,5)
02740 ENDIF
02741 ELSE
02742 IF (JMOHEP(2,I).EQ.0) THEN
02743 WRITE(PHLUN,9050) I,IDHEP(I),JMOHEP(1,I),JDAHEP(1,I),
02744 & JDAHEP(2,I),(PHEP(J,I),J=1,5)
02745 ELSE
02746 WRITE(PHLUN,9060) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),
02747 & JDAHEP(1,I),JDAHEP(2,I),(PHEP(J,I),J=1,5)
02748 ENDIF
02749 ENDIF
02750 30 CONTINUE
02751 SUMVEC(5)=SQRT(SUMVEC(4)**2-SUMVEC(1)**2-SUMVEC(2)**2-
02752 &SUMVEC(3)**2)
02753 WRITE(PHLUN,9070) (SUMVEC(J),J=1,5)
02754 RETURN
02755 9000 FORMAT(1H0,80('='))
02756 9010 FORMAT(1H ,29X,'Event No.:',I10)
02757 9020 FORMAT(1H0,1X,'Nr',3X,'Type',3X,'Parent(s)',2X,'Daughter(s)',6X,
02758 &'Px',7X,'Py',7X,'Pz',7X,'E',4X,'Inv. M.')
02759 9030 FORMAT(1H ,I4,I7,3X,I4,9X,'Stable',2X,5F9.2)
02760 9040 FORMAT(1H ,I4,I7,I4,' - ',I4,5X,'Stable',2X,5F9.2)
02761 9050 FORMAT(1H ,I4,I7,3X,I4,6X,I4,' - ',I4,5F9.2)
02762 9060 FORMAT(1H ,I4,I7,I4,' - ',I4,2X,I4,' - ',I4,5F9.2)
02763 9070 FORMAT(1H0,23X,'Vector Sum: ', 5F9.2)
02764 9080 FORMAT(1H0,6X,'Particle Parameters')
02765 END