00001 
00002 
00003       SUBROUTINE TAUOLA(MODE,KEYPOL) 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012       INTEGER NMXHEP
00013       PARAMETER (NMXHEP=10000)
00014       REAL*8  phep,  vhep 
00015       INTEGER nevhep,nhep,isthep,idhep,jmohep,
00016      $        jdahep
00017       COMMON /hepevt/
00018      $      nevhep,               
00019      $      nhep,                 
00020      $      isthep(nmxhep),   
00021      $      idhep(nmxhep),    
00022      $      jmohep(2,nmxhep), 
00023      $      jdahep(2,nmxhep), 
00024      $      phep(5,nmxhep),   
00025      $      vhep(4,nmxhep)    
00026 
00027       LOGICAL qedrad
00028       COMMON /phoqed/ 
00029      $     qedrad(nmxhep)    
00030 
00031       SAVE hepevt,phoqed
00032       COMMON /TAUPOS/ NP1, NP2 
00033       REAL*4 PHOI(4),PHOF(4)
00034       double precision Q1(4),Q2(4),P1(4),P2(4),P3(4),P4(4)
00035       COMMON / MOMDEC / Q1,Q2,P1,P2,P3,P4
00036 
00037       COMMON /LIBRA/ JAK1,JAK2,ITDKRC,IFPHOT,IFHADM,IFHADP
00038       REAL*4 RRR(1)
00039       LOGICAL IFPSEUDO
00040       common /pseudocoup/ csc,ssc
00041       REAL*4 csc,ssc
00042       save pseudocoup
00043       COMMON / INOUT / INUT,IOUT
00044 
00045 
00046       DIMENSION POL1(4), POL2(4)
00047       double precision POL1x(4), POL2x(4)
00048       INTEGER ION(3)
00049       DATA  POL1 /0.0,0.0,0.0,0.0/
00050       DATA  POL2 /0.0,0.0,0.0,0.0/
00051       DATA PI /3.141592653589793238462643D0/
00052 
00053 
00054       DIMENSION IMOTHER (20)
00055       INTEGER KFHIGGS(3)
00056 
00057 
00058       INTEGER ISON
00059       COMMON /ISONS_TAU/ISON(2)
00060       SAVE /ISONS_TAU/
00061 
00062       IF(MODE.EQ.-1) THEN
00063 
00064 
00065          JAK1  =  0     
00066          JAK2  =  0     
00067          ITDKRC=1.0     
00068          IFPHOT=1.0     
00069          IFHADM=1.0
00070          IFHADP=1.0
00071          POL=1.0        
00072 
00073          KFHIGGS(1) = 25
00074          KFHIGGS(2) = 35
00075          KFHIGGS(3) = 36
00076          KFHIGCH = 37
00077          KFZ0    = 23
00078          KFGAM   = 22
00079          KFTAU   = 15
00080          KFNUE   = 16
00081 
00082          psi=0.5*PI 
00083          xmtau=1.777 
00084          xmh=120     
00085          betah=sqrt(1d0-4*xmtau**2/xmh**2)
00086          csc=cos(psi)*betah
00087          ssc=sin(psi)
00088 
00089          IF (IFPHOT.EQ.1) CALL  PHOINI  
00090          CALL  INIETC(JAK1,JAK2,ITDKRC,IFPHOT)
00091          CALL  INIMAS
00092          CALL  INIPHX(0.01d0)
00093          CALL  INITDK
00094 
00095          ION(1)=0
00096          ION(2)=0
00097          ION(3)=0
00098          CALL  TAUPI0(-1,1,ION)
00099          CALL DEKAY(-1,POL1x)
00100            WRITE(IOUT,7001) pol,psi,ION(1),ION(2),ION(3)
00101       ELSEIF(MODE.EQ.0) THEN
00102 
00103 
00104 
00105 
00106       CALL PHYFIX(NSTOP,NSTART)
00107 
00108       DO II=1,20
00109        IMOTHER(II)=0
00110       ENDDO
00111 
00112       DO II=1,2
00113          ISON(II)=0
00114       ENDDO
00115 
00116       NDEC    = 0
00117 
00118       DO I=NSTART,NHEP
00119         IF(ABS(IDHEP(I)).EQ.KFTAU.AND.ISTHEP(I).EQ.1.AND.
00120      $        (ISTHEP(I).GE.125.OR.ISTHEP(I).LT.120)) THEN
00121            IMOTH=JMOHEP(1,I)
00122            DO WHILE (ABS(IDHEP(IMOTH)).EQ.KFTAU) 
00123               IMOTH=JMOHEP(1,IMOTH)
00124            ENDDO
00125            IF (ISTHEP(IMOTH).EQ.3.OR.
00126      $        (ISTHEP(IMOTH).GE.120.AND.ISTHEP(IMOTH).LE.125)) THEN 
00127               DO J=NSTART,NHEP  
00128                  IF (IDHEP(J).EQ.IDHEP(IMOTH).AND.
00129      $               JMOHEP(1,J).EQ.IMOTH.AND.
00130      $               ISTHEP(J).EQ.2) THEN
00131                     JMOTH=J
00132                     GOTO 66
00133                  ENDIF
00134               ENDDO
00135            ELSE
00136               JMOTH=IMOTH
00137            ENDIF
00138  66        CONTINUE
00139            DO II=1,NDEC
00140             IF(JMOTH.EQ.IMOTHER(II)) GOTO 9999
00141            ENDDO
00142 
00143            NDEC=NDEC+1
00144            IMOTHER(NDEC)= JMOTH
00145         ENDIF
00146  9999   CONTINUE
00147       ENDDO  
00148 
00149 
00150       DO II=1,NDEC
00151          IM=IMOTHER(II)
00152          NCOUNT=0
00153          NP1=0
00154          NP2=0
00155 
00156 
00157 
00158 
00159          IM0=IM
00160          IF (IDHEP(JMOHEP(1,IM0)).EQ.IDHEP(IM0)) IM0=JMOHEP(1,IM0)
00161          ISEL=-1
00162          DO I=NSTART,NHEP
00163             IF (ISTHEP(I).EQ.3.OR.
00164      $           (ISTHEP(I).GE.120.AND.ISTHEP(I).LE.125)) THEN 
00165                GOTO 76
00166             ENDIF
00167             IMOTH=JMOHEP(1,I)
00168             DO WHILE (IDHEP(IMOTH).EQ.IDHEP(I).OR.ABS(IDHEP(IMOTH)).EQ.KFTAU) 
00169                IMOTH=JMOHEP(1,IMOTH)
00170             ENDDO
00171             IF ((IMOTH.EQ.IM0.OR.IMOTH.EQ.IM).AND.ISEL.EQ.-1) THEN
00172                ISON(1)=I
00173                ISEL=0
00174             ELSEIF ((IMOTH.EQ.IM0.OR.IMOTH.EQ.IM).AND.ISEL.EQ.0) THEN
00175                ISON(2)=I
00176             ELSEIF ((IMOTH.NE.IM0.AND.IMOTH.NE.IM).AND.ISEL.EQ.0) THEN
00177                ISEL=1
00178                GOTO 77
00179             ENDIF
00180  76         CONTINUE
00181          ENDDO
00182  77      CONTINUE
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200          DO I=ISON(1),ISON(2)
00201             IF(IDHEP(I).EQ.-KFTAU.OR.IDHEP(I).EQ.-KFNUE) NCOUNT=NCOUNT+1
00202             IF(IDHEP(I).EQ. KFTAU.OR.IDHEP(I).EQ. KFNUE) NCOUNT=NCOUNT+1
00203          ENDDO
00204 
00205 
00206  666     CONTINUE
00207 
00208 
00209          DO I=MAX(NP1+1,ISON(1)),ISON(2) 
00210 
00211             IF(IDHEP(I).EQ.-KFTAU.OR.IDHEP(I).EQ.-KFNUE) NP1=I
00212          ENDDO
00213 
00214          DO I=MAX(NP2+1,ISON(1)),ISON(2)
00215 
00216             IF(IDHEP(I).EQ. KFTAU.OR.IDHEP(I).EQ. KFNUE) NP2=I
00217          ENDDO
00218          DO I=1,4
00219             P1(I)= PHEP(I,NP1)    
00220             P2(I)= PHEP(I,NP2)    
00221             Q1(I)= P1(I)+P2(I)
00222          ENDDO
00223 
00224          POL1(3)=  0D0
00225          POL2(3)=  0D0
00226          
00227          IF(KEYPOL.EQ.1) THEN
00228 
00229          CALL RANMAR(RRR,1)
00230 
00231          IF(IDHEP(IM).EQ.KFHIGGS(1).OR.IDHEP(IM).EQ.KFHIGGS(2).OR.
00232      $    IDHEP(IM).EQ.KFHIGGS(3)) THEN   
00233             IF(RRR(1).LT.0.5) THEN
00234                POL1(3)= POL
00235                POL2(3)=-POL
00236             ELSE     
00237                POL1(3)=-POL
00238                POL2(3)= POL
00239             ENDIF
00240          ELSEIF((IDHEP(IM).EQ.KFZ0).OR.(IDHEP(IM).EQ.KFGAM)) THEN 
00241 
00242 
00243 
00244 
00245 
00246 
00247 
00248             POLZ0=PLZAPX(.true.,IM,NP1,NP2)
00249             IF(RRR(1).LT.POLZ0) THEN
00250                POL1(3)= POL
00251                POL2(3)= POL
00252             ELSE     
00253                POL1(3)=-POL
00254                POL2(3)=-POL
00255             ENDIF
00256          ELSEIF(IDHEP(NP1).EQ.-IDHEP(NP2))THEN 
00257             POLZ0=PLZAPX(.true.,IM,NP1,NP2)
00258             IF(RRR(1).LT.POLZ0) THEN
00259                POL1(3)= POL
00260                POL2(3)= POL
00261             ELSE     
00262                POL1(3)=-POL
00263                POL2(3)=-POL
00264             ENDIF
00265          ELSEIF(ABS(IDHEP(IM)).EQ.KFHIGCH) THEN 
00266             POL1(3)=  POL
00267             POL2(3)=  POL
00268          ELSE 
00269             POL1(3)= -POL
00270             POL2(3)= -POL
00271          ENDIF
00272 
00273          ENDIF  
00274 
00275          IF(IDHEP(IM).EQ.KFHIGGS(1).OR.IDHEP(IM).EQ.KFHIGGS(2).OR.
00276      $   IDHEP(IM).EQ.KFHIGGS(3)) THEN
00277            IF(IDHEP(NP1).EQ.-KFTAU                           .AND.
00278      $       (JDAHEP(1,NP1).LE.NP1.OR.JDAHEP(1,NP1).GT.NHEP) .AND.
00279      $        IDHEP(NP2).EQ. KFTAU                            .AND.
00280      $       (JDAHEP(1,NP2).LE.NP2.OR.JDAHEP(1,NP2).GT.NHEP)
00281      $                                                       ) THEN
00282                IF     (IDHEP(IM).EQ.KFHIGGS(1)) THEN
00283                  IFPSEUDO= .FALSE.
00284                ELSEIF (IDHEP(IM).EQ.KFHIGGS(2)) THEN
00285                  IFPSEUDO= .FALSE.
00286                ELSEIF (IDHEP(IM).EQ.KFHIGGS(3)) THEN
00287                  IFPSEUDO= .TRUE.
00288                ELSE
00289                  WRITE(*,*) 'Warning from TAUOLA:'
00290                  WRITE(*,*) 'I stop this run, wrong IDHEP(IM)=',IDHEP(IM)
00291                  STOP
00292                ENDIF
00293                CALL SPINHIGGS(IM,NP1,NP2,IFPSEUDO,Pol1,Pol2)
00294                IF (IFPHOT.EQ.1) CALL PHOTOS(IM)  
00295                                                  
00296 
00297 
00298            ENDIF
00299          ELSE
00300            IF(IDHEP(NP1).EQ.-KFTAU.AND.
00301      $       (JDAHEP(1,NP1).LE.NP1.OR.JDAHEP(1,NP1).GT.NHEP)) THEN
00302 
00303              CALL DEXAY(1,POL1)
00304              IF (IFPHOT.EQ.1) CALL PHOTOS(NP1)
00305              CALL TAUPI0(0,1,ION)
00306            ENDIF
00307 
00308            IF(IDHEP(NP2).EQ. KFTAU.AND.
00309      $       (JDAHEP(1,NP2).LE.NP2.OR.JDAHEP(1,NP2).GT.NHEP)) THEN
00310 
00311              CALL DEXAY(2,POL2)
00312              IF (IFPHOT.EQ.1) CALL PHOTOS(NP2)
00313              CALL TAUPI0(0,2,ION)
00314            ENDIF
00315          ENDIF
00316          NCOUNT=NCOUNT-2
00317          IF (NCOUNT.GT.0) GOTO 666
00318       ENDDO
00319 
00320       ELSEIF(MODE.EQ.1) THEN
00321 
00322 
00323       CALL DEXAY(100,POL1)
00324       CALL DEKAY(100,POL1x)
00325            WRITE(IOUT,7002)
00326       ENDIF
00327 
00328  7001 FORMAT(///1X,15(5H*****)
00329      $ /,' *',     25X,'*****TAUOLA UNIVERSAL INTERFACE: ******',9X,1H*,
00330      $ /,' *',     25X,'*****VERSION 1.22, April 2009 (gfort)**',9X,1H*,
00331      $ /,' *',     25X,'**AUTHORS: P. Golonka, B. Kersevan, ***',9X,1H*,
00332      $ /,' *',     25X,'**T. Pierzchala, E. Richter-Was, ******',9X,1H*,
00333      $ /,' *',     25X,'****** Z. Was, M. Worek ***************',9X,1H*,
00334      $ /,' *',     25X,'**USEFUL DISCUSSIONS, IN PARTICULAR ***',9X,1H*,
00335      $ /,' *',     25X,'*WITH C. Biscarat and S. Slabospitzky**',9X,1H*,
00336      $ /,' *',     25X,'****** are warmly acknowledged ********',9X,1H*,
00337      $ /,' *',     25X,'                                       ',9X,1H*,
00338      $ /,' *',     25X,'********** INITIALIZATION  ************',9X,1H*,
00339      $ /,' *',F20.5,5X,'tau polarization switch must be 1 or 0 ',9X,1H*,
00340      $ /,' *',F20.5,5X,'Higs scalar/pseudo mix CERN-TH/2003-166',9X,1H*,
00341      $ /,' *',I10, 15X,'PI0 decay switch must be 1 or 0        ',9X,1H*,
00342      $ /,' *',I10, 15X,'ETA decay switch must be 1 or 0        ',9X,1H*,
00343      $ /,' *',I10, 15X,'K0S decay switch must be 1 or 0        ',9X,1H*,
00344      $  /,1X,15(5H*****)/)
00345 
00346  7002 FORMAT(///1X,15(5H*****)
00347      $ /,' *',     25X,'*****TAUOLA UNIVERSAL INTERFACE: ******',9X,1H*,
00348      $ /,' *',     25X,'*****VERSION 1.22, April 2009 (gfort)**',9X,1H*,
00349      $ /,' *',     25X,'**AUTHORS: P. Golonka, B. Kersevan, ***',9X,1H*,
00350      $ /,' *',     25X,'**T. Pierzchala, E. Richter-Was, ******',9X,1H*,
00351      $ /,' *',     25X,'****** Z. Was, M. Worek ***************',9X,1H*,
00352      $ /,' *',     25X,'**USEFUL DISCUSSIONS, IN PARTICULAR ***',9X,1H*,
00353      $ /,' *',     25X,'*WITH C. Biscarat and S. Slabospitzky**',9X,1H*,
00354      $ /,' *',     25X,'****** are warmly acknowledged ********',9X,1H*,
00355      $ /,' *',     25X,'****** END OF MODULE OPERATION ********',9X,1H*,
00356      $  /,1X,15(5H*****)/)
00357 
00358       END
00359 
00360       SUBROUTINE SPINHIGGS(IM,NP1,NP2,IFPSEUDO,Pol1,Pol2)
00361       LOGICAL IFPSEUDO
00362       REAL*8 HH1,HH2,wthiggs
00363       DIMENSION POL1(4), POL2(4),HH1(4),HH2(4), RRR(1)
00364 
00365 
00366       INTEGER ION(3)
00367  10   CONTINUE
00368          CALL RANMAR(RRR,1)
00369          CALL DEKAY(1,HH1)
00370          CALL DEKAY(2,HH2)
00371          wt=wthiggs(IFPSEUDO,HH1,HH2)
00372       IF (RRR(1).GT.WT) GOTO 10
00373       CALL DEKAY(1+10,HH1)
00374       CALL TAUPI0(0,1,ION)
00375       CALL DEKAY(2+10,HH2)
00376       CALL TAUPI0(0,2,ION)
00377       END
00378       FUNCTION wthiggs(IFPSEUDO,HH1,HH2)
00379       LOGICAL IFPSEUDO
00380       common /pseudocoup/ csc,ssc
00381       REAL*4 csc,ssc
00382       save pseudocoup
00383       REAL*8 HH1(4),HH2(4),R(4,4),wthiggs
00384       DO K=1,4
00385        DO L=1,4
00386         R(K,L)=0
00387        ENDDO
00388       ENDDO
00389       WTHIGGS=0D0
00390       
00391       R(4,4)= 1D0    
00392       R(3,3)=-1D0    
00393                      
00394       IF (IFPSEUDO) THEN
00395         R(1,1)=-1
00396         R(2,2)= -1
00397         R(1,1)=(csc**2-ssc**2)/(csc**2+ssc**2)
00398         R(2,2)=(csc**2-ssc**2)/(csc**2+ssc**2)
00399         R(1,2)=2*csc*ssc/(csc**2+ssc**2)
00400         R(2,1)=-2*csc*ssc/(csc**2+ssc**2)
00401       ELSE
00402         R(1,1)=1
00403         R(2,2)=1
00404       ENDIF
00405 
00406 
00407 
00408       DO K=1,4
00409        DO L=1,4
00410         WTHIGGS=WTHIGGS+R(K,L)*HH1(K)*HH2(L)
00411        ENDDO
00412       ENDDO
00413         WTHIGGS=WTHIGGS/4D0
00414       END
00415 
00416       FUNCTION PLZAPX(HOPEin,IM0,NP1,NP2)
00417 
00418 
00419 
00420 
00421       REAL*8 PLZAP0,SVAR,COSTHE,sini,sfin,ZPROP2,
00422      $       P1(4),P2(4),Q1(4),Q2(4),QQ(4),PH(4),PD1(4),PD2(4),
00423      $       PQ1(4),PQ2(4),PB(4),PA(4)
00424       REAL*4 PLZAPX
00425       INTEGER IM
00426       LOGICAL HOPE,HOPEin
00427 
00428       INTEGER NMXHEP
00429       PARAMETER (NMXHEP=10000)
00430       REAL*8  phep,  vhep 
00431       INTEGER nevhep,nhep,isthep,idhep,jmohep,
00432      $        jdahep
00433       COMMON /hepevt/
00434      $      nevhep,               
00435      $      nhep,                 
00436      $      isthep(nmxhep),   
00437      $      idhep(nmxhep),    
00438      $      jmohep(2,nmxhep), 
00439      $      jdahep(2,nmxhep), 
00440      $      phep(5,nmxhep),   
00441      $      vhep(4,nmxhep)    
00442 
00443       LOGICAL qedrad
00444       COMMON /phoqed/ 
00445      $     qedrad(nmxhep)    
00446 
00447       SAVE hepevt,phoqed
00448 
00449 
00450       INTEGER ISON
00451       COMMON /ISONS_TAU/ISON(2)
00452 
00453 
00454 
00455 
00456              HOPE=HOPEin
00457 
00458             IM=IM0
00459             IM00=JMOHEP(1,IM0)
00460 
00461             IF (IM00.GT.0) THEN
00462               IF (IDHEP(IM0).EQ.IDHEP(IM00)) IM=JMOHEP(1,IM0)
00463             ENDIF                                                              
00464 
00465 
00466             IMO1=JMOHEP(1,IM)
00467             IMO2=JMOHEP(2,IM)
00468 
00469 
00470             IM00=IMO1
00471             IF (ISTHEP(IM00).EQ.120) THEN
00472                IMO1=JMOHEP(1,IM00)
00473                IMO2=JMOHEP(2,IM00)
00474             ENDIF
00475 
00476 
00477             IFFULL=0
00478 
00479       IF (IMO1.EQ.0.AND.IMO2.EQ.0) THEN
00480          IMO1=JMOHEP(1,NP1)
00481 
00482          IF (IDHEP(IMO1).EQ.IDHEP(NP1)) IMO1=JMOHEP(1,IMO1) 
00483 
00484          IMO2=JMOHEP(2,NP1)
00485 
00486          IF (IDHEP(IMO2).EQ.IDHEP(NP2)) IMO2=JMOHEP(1,IMO2) 
00487 
00488          IFFULL=1
00489 
00490 
00491       ELSEIF (IDHEP(IM).NE.22.AND.IDHEP(IM).NE.23) THEN
00492          IMO1=JMOHEP(1,NP1)
00493 
00494          IF (IDHEP(IMO1).EQ.IDHEP(NP1)) IMO1=JMOHEP(1,IMO1) 
00495 
00496          IMO2=JMOHEP(2,NP1)
00497 
00498          IF (IDHEP(IMO2).EQ.IDHEP(NP2)) IMO2=JMOHEP(1,IMO2) 
00499 
00500          IFFULL=1
00501       ENDIF
00502 
00503             
00504 
00505             IF (IMO1.EQ.0) HOPE=.FALSE.
00506             IF (IMO2.EQ.0) HOPE=.FALSE.
00507             IF (IMO1.EQ.IMO2) HOPE=.FALSE.
00508 
00509 
00510          DO I=1,4
00511             Q1(I)= PHEP(I,NP1)              
00512             Q2(I)= PHEP(I,NP2)              
00513          ENDDO
00514 
00515 
00516 
00517       IF (IM.EQ.JMOHEP(1,IM0).AND.
00518      $     (IDHEP(IM).EQ.22.OR.IDHEP(IM).EQ.23)) THEN
00519          DO K=1,4
00520             PB(K)=PHEP(K,IM)
00521             PA(K)=PHEP(K,IM0)
00522          ENDDO
00523 
00524 
00525                CALL BOSTDQ( 1,PA, Q1, Q1)
00526                CALL BOSTDQ( 1,PA, Q2, Q2)
00527                CALL BOSTDQ(-1,PB, Q1, Q1)
00528                CALL BOSTDQ(-1,PB, Q2, Q2)
00529 
00530               ENDIF
00531 
00532          DO I=1,4                                                                                   
00533             QQ(I)= Q1(I)+Q2(I)              
00534             IF (HOPE) P1(I)=PHEP(I,IMO1)    
00535             IF (HOPE) P2(I)=PHEP(I,IMO2)    
00536             PH(I)=0D0
00537             PD1(I)=0D0
00538             PD2(I)=0D0
00539          ENDDO
00540 
00541                    IDFQ1=IDHEP(NP1)
00542                    IDFQ2=IDHEP(NP2)
00543          IF (HOPE) IDFP1=IDHEP(IMO1)
00544          IF (HOPE) IDFP2=IDHEP(IMO2)
00545 
00546          SVAR=QQ(4)**2-QQ(3)**2-QQ(2)**2-QQ(1)**2
00547          IF (.NOT.HOPE) THEN
00548 
00549 
00550 
00551 
00552            PLZAPX=0.5                         
00553            RETURN
00554          ENDIF
00555 
00556 
00557 
00558 
00559 
00560 
00561 
00562          NX1=JDAHEP(1,IM00)
00563          NX2=JDAHEP(2,IM00)
00564 
00565          INBR=IM 
00566          IF (IFFULL.EQ.1) INBR=NP1  
00567          IF (IDHEP(JMOHEP(1,INBR)).EQ.IDHEP(INBR)) INBR=JMOHEP(1,INBR) 
00568 
00569          IF(NX1.EQ.0.OR.NX2.EQ.0) THEN
00570            NX1=INBR
00571            NX2=INBR
00572            DO K=1,INBR-1
00573              IF(JMOHEP(1,INBR-K).EQ.JMOHEP(1,INBR)) THEN
00574               NX1=INBR-K
00575              ELSE
00576                 GOTO 7
00577              ENDIF
00578            ENDDO
00579  7         CONTINUE
00580 
00581            DO K=INBR+1,NHEP
00582              IF(JMOHEP(1,K).EQ.JMOHEP(1,INBR)) THEN
00583               NX2=K
00584              ELSE
00585                 GOTO 8
00586              ENDIF
00587            ENDDO
00588  8         CONTINUE
00589          ENDIF
00590 
00591 
00592          IF (ABS(IDFP1).GE.20.AND.ABS(IDFP2).GE.20) HOPE=.FALSE.
00593 
00594          IF (ABS(IDFP1).LE.20.AND.ABS(IDFP2).LE.20.AND.IDFP1+IDFP2.NE.0)
00595      $       HOPE=.FALSE.
00596          IF (.NOT.HOPE) THEN
00597 
00598 
00599 
00600 
00601            PLZAPX=0.5                         
00602            RETURN
00603          ENDIF
00604          IF (ABS(IDFP1).LT.20) IDE= IDFP1
00605          IF (ABS(IDFP2).LT.20) IDE=-IDFP2
00606 
00607 
00608 
00609 
00610 
00611 
00612 
00613 
00614 
00615            DO L=1,4
00616             PD1(L)=P1(L)
00617             PD2(L)=P2(L)
00618            ENDDO 
00619 
00620                 DO L=1,4
00621                 PQ1(L)=Q1(L)
00622                 PQ2(L)=Q2(L)
00623                 ENDDO 
00624 
00625          IFLAV=min(ABS(IDFP1),ABS(IDFP2))
00626 
00627 
00628 
00629 
00630 
00631 
00632 
00633 
00634  
00635          IF (ABS(IDFP1).GE.20) THEN
00636            DO k=NX1,NX2
00637              IDP=IDHEP(k)
00638              IF (ABS(IDP).EQ.IFLAV) THEN
00639                DO L=1,4
00640                  PD1(L)=-PHEP(L,K)
00641                ENDDO
00642              ENDIF
00643            ENDDO
00644          ENDIF
00645 
00646          IF (ABS(IDFP2).GE.20) THEN
00647            DO k=NX1,NX2
00648              IDP=IDHEP(k)
00649              IF (ABS(IDP).EQ.IFLAV) THEN
00650                DO L=1,4
00651                  PD2(L)=-PHEP(L,K)
00652                ENDDO
00653              ENDIF
00654            ENDDO
00655          ENDIF
00656 
00657 
00658 
00659          IF (ABS(IDFP1).GE.20) THEN
00660            DO L=1,4
00661              PH(L)=P1(L)
00662            ENDDO
00663            xm1=abs((PD1(4)+PH(4))**2-(PD1(3)+PH(3))**2
00664      $            -(PD1(2)+PH(2))**2-(PD1(1)+PH(1))**2)
00665            xm2=abs((PD2(4)+PH(4))**2-(PD2(3)+PH(3))**2
00666      $            -(PD2(2)+PH(2))**2-(PD2(1)+PH(1))**2)
00667           IF (XM1.LT.XM2) THEN
00668              DO L=1,4
00669                PD1(L)=PD1(L)+P1(L)
00670              ENDDO
00671            ELSE
00672              DO L=1,4
00673                PD2(L)=PD2(L)+P1(L)
00674              ENDDO
00675            ENDIF
00676          ENDIF
00677 
00678 
00679 
00680 
00681          IF (ABS(IDFP2).GE.20) THEN
00682            DO L=1,4
00683              PH(L)=P2(L)
00684            ENDDO
00685            xm1=abs((PD1(4)+PH(4))**2-(PD1(3)+PH(3))**2
00686      $            -(PD1(2)+PH(2))**2-(PD1(1)+PH(1))**2)
00687            xm2=abs((PD2(4)+PH(4))**2-(PD2(3)+PH(3))**2
00688      $            -(PD2(2)+PH(2))**2-(PD2(1)+PH(1))**2)
00689            IF (XM1.LT.XM2) THEN
00690              DO L=1,4
00691                PD1(L)=PD1(L)+P2(L)
00692              ENDDO
00693            ELSE
00694              DO L=1,4
00695                PD2(L)=PD2(L)+P2(L)
00696              ENDDO
00697            ENDIF
00698          ENDIF
00699 
00700 
00701 
00702 
00703       NPH1=NP1
00704       NPH2=NP2
00705       IF (IDHEP(JMOHEP(1,NP1)).EQ.IDHEP(NP1)) NPH1=JMOHEP(1,NP1) 
00706       IF (IDHEP(JMOHEP(1,NP2)).EQ.IDHEP(NP2)) NPH2=JMOHEP(1,NP2) 
00707 
00708 
00709          DO k=NX1,NX2
00710          IF (ABS(IDHEP(K)).NE.IFLAV.AND.K.NE.IM.AND.
00711 
00712      $       K.NE.NPH1.AND.K.NE.NPH2) THEN 
00713 
00714           IF(IDHEP(K).EQ.22.AND.IFFULL.EQ.1) THEN
00715             DO L=1,4
00716               PH(L)=PHEP(L,K)
00717             ENDDO
00718             xm1=abs((PD1(4)-PH(4))**2-(PD1(3)-PH(3))**2
00719      $             -(PD1(2)-PH(2))**2-(PD1(1)-PH(1))**2)
00720             xm2=abs((PD2(4)-PH(4))**2-(PD2(3)-PH(3))**2
00721      $             -(PD2(2)-PH(2))**2-(PD2(1)-PH(1))**2)
00722            xm3=abs((PQ1(4)+PH(4))**2-(PQ1(3)+PH(3))**2
00723      $            -(PQ1(2)+PH(2))**2-(PQ1(1)+PH(1))**2)
00724            xm4=abs((PQ2(4)+PH(4))**2-(PQ2(3)+PH(3))**2
00725      $            -(PQ2(2)+PH(2))**2-(PQ2(1)+PH(1))**2)
00726 
00727   
00728             sini=abs((PD1(4)+PD2(4)-PH(4))**2-(PD1(3)+PD2(3)-PH(3))**2
00729      $              -(PD1(2)+PD2(2)-PH(2))**2-(PD1(1)+PD2(1)-PH(1))**2)
00730             sfin=abs((PD1(4)+PD2(4)      )**2-(PD1(3)+PD2(3)      )**2
00731      $              -(PD1(2)+PD2(2)      )**2-(PD1(1)+PD2(1)      )**2)
00732 
00733            FACINI=ZPROP2(sini)
00734            FACFIN=ZPROP2(sfin)
00735 
00736            XM1=XM1/FACINI
00737            XM2=XM2/FACINI
00738            XM3=XM3/FACFIN
00739            XM4=XM4/FACFIN
00740 
00741            XM=MIN(XM1,XM2,XM3,XM4)
00742                   IF      (XM1.EQ.XM) THEN 
00743                      DO L=1,4
00744                        PD1(L)=PD1(L)-PH(L)
00745                      ENDDO
00746                   ELSEIF   (XM2.EQ.XM) THEN 
00747                      DO L=1,4
00748                        PD2(L)=PD2(L)-PH(L)
00749                      ENDDO
00750                   ELSEIF   (XM3.EQ.XM) THEN 
00751                      DO L=1,4
00752                         Q1(L)=PQ1(L)+PH(L)
00753                      ENDDO
00754                   ELSE
00755                      DO L=1,4
00756                         Q2(L)=PQ2(L)+PH(L)
00757                      ENDDO
00758                   ENDIF
00759            ELSE
00760             DO L=1,4
00761               PH(L)=PHEP(L,K)
00762             ENDDO
00763             xm1=abs((PD1(4)-PH(4))**2-(PD1(3)-PH(3))**2
00764      $             -(PD1(2)-PH(2))**2-(PD1(1)-PH(1))**2)
00765             xm2=abs((PD2(4)-PH(4))**2-(PD2(3)-PH(3))**2
00766      $             -(PD2(2)-PH(2))**2-(PD2(1)-PH(1))**2)
00767             IF (XM1.LT.XM2) THEN
00768               DO L=1,4
00769                 PD1(L)=PD1(L)-PH(L)
00770               ENDDO
00771             ELSE
00772               DO L=1,4
00773                 PD2(L)=PD2(L)-PH(L)
00774               ENDDO
00775             ENDIF
00776            ENDIF
00777           ENDIF
00778          ENDDO
00779 
00780 
00781 
00782 
00783 
00784 
00785 
00786 
00787 
00788 
00789 
00790 
00791 
00792        
00793  
00794 
00795 
00796       IF (ABS(IDHEP(IM0)).EQ.22.OR.abs(IDHEP(IM0)).EQ.23) THEN
00797          DO K=ISON(1),ISON(2)
00798             IF(ABS(IDHEP(K)).EQ.22) THEN
00799 
00800 
00801               do l=1,4
00802               ph(l)=phep(l,k)
00803               enddo
00804 
00805            xm3=abs((PQ1(4)+PH(4))**2-(PQ1(3)+PH(3))**2
00806      $            -(PQ1(2)+PH(2))**2-(PQ1(1)+PH(1))**2)
00807            xm4=abs((PQ2(4)+PH(4))**2-(PQ2(3)+PH(3))**2
00808      $            -(PQ2(2)+PH(2))**2-(PQ2(1)+PH(1))**2)  
00809 
00810            XM=MIN(XM3,XM4) 
00811 
00812                   IF   (XM3.EQ.XM) THEN 
00813                      DO L=1,4
00814                         Q1(L)=PQ1(L)+PH(L)
00815                      ENDDO
00816                   ELSE
00817                      DO L=1,4
00818                         Q2(L)=PQ2(L)+PH(L)
00819                      ENDDO
00820                   ENDIF
00821             endif
00822           enddo
00823           ENDIF
00824 
00825 
00826 
00827 
00828 
00829 
00830 
00831       CALL ANGULU(PD1,PD2,Q1,Q2,COSTHE)
00832      
00833       PLZAPX=PLZAP0(IDE,IDFQ1,SVAR,COSTHE)
00834       END
00835 
00836       SUBROUTINE ANGULU(PD1,PD2,Q1,Q2,COSTHE)
00837       REAL*8 PD1(4),PD2(4),Q1(4),Q2(4),COSTHE,P(4),QQ(4),QT(4)
00838 
00839 
00840 
00841 
00842 
00843       XM1=ABS(PD1(4)**2-PD1(3)**2-PD1(2)**2-PD1(1)**2)
00844       XM2=ABS(PD2(4)**2-PD2(3)**2-PD2(2)**2-PD2(1)**2)
00845       IF (XM1.LT.XM2) THEN
00846         SIGN=1D0
00847         DO K=1,4
00848           P(K)=PD1(K)
00849         ENDDO
00850       ELSE
00851         SIGN=-1D0
00852         DO K=1,4
00853           P(K)=PD2(K)
00854         ENDDO
00855       ENDIF
00856 
00857       DO K=1,4
00858        QQ(K)=Q1(k)+Q2(K)
00859        QT(K)=Q1(K)-Q2(K)
00860       ENDDO
00861 
00862        XMQQ=SQRT(QQ(4)**2-QQ(3)**2-QQ(2)**2-QQ(1)**2)
00863 
00864        QTXQQ=QT(4)*QQ(4)-QT(3)*QQ(3)-QT(2)*QQ(2)-QT(1)*QQ(1)
00865       DO K=1,4
00866        QT(K)=QT(K)-QQ(K)*QTXQQ/XMQQ**2
00867       ENDDO
00868 
00869        PXQQ=P(4)*QQ(4)-P(3)*QQ(3)-P(2)*QQ(2)-P(1)*QQ(1)
00870       DO K=1,4
00871        P(K)=P(K)-QQ(K)*PXQQ/XMQQ**2
00872       ENDDO
00873 
00874        PXP  =SQRT(p(1)**2+p(2)**2+p(3)**2-p(4)**2)
00875        QTXQT=SQRT(QT(3)**2+QT(2)**2+QT(1)**2-QT(4)**2)
00876        PXQT =P(3)*QT(3)+P(2)*QT(2)+P(1)*QT(1)-P(4)*QT(4)
00877        COSTHE=PXQT/PXP/QTXQT
00878        COSTHE=COSTHE*SIGN
00879       END
00880 
00881       FUNCTION PLZAP0(IDE,IDF,SVAR,COSTH0)
00882 
00883 
00884       REAL*8 PLZAP0,SVAR,COSTHE,COSTH0,T_BORN
00885 
00886       COSTHE=COSTH0
00887 
00888 
00889 
00890       IF (IDF.GT.0) THEN
00891         CALL INITWK(IDE,IDF,SVAR)
00892       ELSE
00893         CALL INITWK(-IDE,-IDF,SVAR)
00894       ENDIF
00895       PLZAP0=T_BORN(0,SVAR,COSTHE,1D0,1D0)
00896      $  /(T_BORN(0,SVAR,COSTHE,1D0,1D0)+T_BORN(0,SVAR,COSTHE,-1D0,-1D0))
00897 
00898 
00899       END
00900       FUNCTION T_BORN(MODE,SVAR,COSTHE,TA,TB)
00901 
00902 
00903 
00904 
00905 
00906 
00907 
00908 
00909 
00910 
00911       IMPLICIT REAL*8(A-H,O-Z)
00912       COMMON / T_BEAMPM / ENE ,AMIN,AMFIN,IDE,IDF
00913       REAL*8              ENE ,AMIN,AMFIN
00914       COMMON / T_GAUSPM /SS,POLN,T3E,QE,T3F,QF
00915      &                  ,XUPGI   ,XUPZI   ,XUPGF   ,XUPZF
00916      &                  ,NDIAG0,NDIAGA,KEYA,KEYZ
00917      &                  ,ITCE,JTCE,ITCF,JTCF,KOLOR
00918       REAL*8             SS,POLN,T3E,QE,T3F,QF
00919      &                  ,XUPGI(2),XUPZI(2),XUPGF(2),XUPZF(2)
00920       REAL*8            SEPS1,SEPS2
00921 
00922       COMMON / T_GSWPRM /SWSQ,AMW,AMZ,AMH,AMTOP,GAMMZ
00923       REAL*8             SWSQ,AMW,AMZ,AMH,AMTOP,GAMMZ
00924 
00925 
00926 
00927 
00928 
00929       COMPLEX*16 ABORN(2,2),APHOT(2,2),AZETT(2,2)
00930       COMPLEX*16 XUPZFP(2),XUPZIP(2)
00931       COMPLEX*16 ABORNM(2,2),APHOTM(2,2),AZETTM(2,2)
00932       COMPLEX*16 PROPA,PROPZ
00933       COMPLEX*16 XR,XI
00934       COMPLEX*16 XUPF,XUPI,XFF(4),XFEM,XFOTA,XRHO,XKE,XKF,XKEF
00935       COMPLEX*16 XTHING,XVE,XVF,XVEF
00936       DATA XI/(0.D0,1.D0)/,XR/(1.D0,0.D0)/
00937       DATA MODE0 /-5/
00938       DATA IDE0 /-55/
00939       DATA SVAR0,COST0 /-5.D0,-6.D0/
00940       DATA PI /3.141592653589793238462643D0/
00941       DATA SEPS1,SEPS2 /0D0,0D0/
00942 
00943 
00944       IF ( MODE.NE.MODE0.OR.SVAR.NE.SVAR0.OR.COSTHE.NE.COST0
00945      $    .OR.IDE0.NE.IDE)THEN
00946 
00947         KEYGSW=1
00948 
00949         IDE0=IDE
00950         MODE0=MODE
00951         SVAR0=SVAR
00952         COST0=COSTHE
00953         SINTHE=SQRT(1.D0-COSTHE**2)
00954         BETA=SQRT(MAX(0D0,1D0-4D0*AMFIN**2/SVAR))
00955 
00956         XUPZFP(1)=0.5D0*(XUPZF(1)+XUPZF(2))+0.5*BETA*(XUPZF(1)-XUPZF(2))
00957         XUPZFP(2)=0.5D0*(XUPZF(1)+XUPZF(2))-0.5*BETA*(XUPZF(1)-XUPZF(2))
00958         XUPZIP(1)=0.5D0*(XUPZI(1)+XUPZI(2))+0.5*(XUPZI(1)-XUPZI(2))
00959         XUPZIP(2)=0.5D0*(XUPZI(1)+XUPZI(2))-0.5*(XUPZI(1)-XUPZI(2))
00960 
00961         XUPF     =0.5D0*(XUPZF(1)+XUPZF(2))
00962         XUPI     =0.5D0*(XUPZI(1)+XUPZI(2))
00963         XTHING   =0D0
00964 
00965         PROPA =1D0/SVAR
00966         PROPZ =1D0/DCMPLX(SVAR-AMZ**2,SVAR/AMZ*GAMMZ)
00967         IF (KEYGSW.EQ.0) PROPZ=0.D0
00968         DO 50 I=1,2
00969          DO 50 J=1,2
00970           REGULA= (3-2*I)*(3-2*J) + COSTHE
00971           REGULM=-(3-2*I)*(3-2*J) * SINTHE *2.D0*AMFIN/SQRT(SVAR)
00972           APHOT(I,J)=PROPA*(XUPGI(I)*XUPGF(J)*REGULA)
00973           AZETT(I,J)=PROPZ*(XUPZIP(I)*XUPZFP(J)+XTHING)*REGULA
00974           ABORN(I,J)=APHOT(I,J)+AZETT(I,J)
00975           APHOTM(I,J)=PROPA*DCMPLX(0D0,1D0)*XUPGI(I)*XUPGF(J)*REGULM
00976           AZETTM(I,J)=PROPZ*DCMPLX(0D0,1D0)*(XUPZIP(I)*XUPF+XTHING)*REGULM
00977           ABORNM(I,J)=APHOTM(I,J)+AZETTM(I,J)
00978    50   CONTINUE
00979       ENDIF
00980 
00981 
00982 
00983 
00984 
00985       POLAR1=  (SEPS1)
00986       POLAR2= (-SEPS2)
00987       BORN=0D0
00988       DO 150 I=1,2
00989        HELIC= 3-2*I
00990        DO 150 J=1,2
00991         HELIT=3-2*J
00992         FACTOR=KOLOR*(1D0+HELIC*POLAR1)*(1D0-HELIC*POLAR2)/4D0
00993         FACTOM=FACTOR*(1+HELIT*TA)*(1-HELIT*TB)
00994         FACTOR=FACTOR*(1+HELIT*TA)*(1+HELIT*TB)
00995 
00996         BORN=BORN+CDABS(ABORN(I,J))**2*FACTOR
00997 
00998         IF (MODE.GE.1) THEN
00999          BORN=BORN+CDABS(ABORNM(I,J))**2*FACTOM
01000         ENDIF
01001 
01002   150 CONTINUE
01003 
01004       FUNT=BORN
01005       IF(FUNT.LT.0.D0)  FUNT=BORN
01006 
01007 
01008       IF (SVAR.GT.4D0*AMFIN**2) THEN
01009 
01010         THRESH=SQRT(1-4D0*AMFIN**2/SVAR)
01011         T_BORN= FUNT*SVAR**2*THRESH
01012       ELSE
01013         THRESH=0.D0
01014         T_BORN=0.D0
01015       ENDIF
01016 
01017 
01018 
01019       END
01020 
01021       SUBROUTINE INITWK(IDEX,IDFX,SVAR)
01022 
01023       IMPLICIT REAL*8 (A-H,O-Z)
01024       COMMON / T_BEAMPM / ENE ,AMIN,AMFIN,IDE,IDF
01025       REAL*8              ENE ,AMIN,AMFIN
01026       COMMON / T_GAUSPM /SS,POLN,T3E,QE,T3F,QF
01027      &                  ,XUPGI   ,XUPZI   ,XUPGF   ,XUPZF
01028      &                  ,NDIAG0,NDIAGA,KEYA,KEYZ
01029      &                  ,ITCE,JTCE,ITCF,JTCF,KOLOR
01030       REAL*8             SS,POLN,T3E,QE,T3F,QF
01031      &                  ,XUPGI(2),XUPZI(2),XUPGF(2),XUPZF(2)
01032       COMMON / T_GSWPRM /SWSQ,AMW,AMZ,AMH,AMTOP,GAMMZ
01033       REAL*8             SWSQ,AMW,AMZ,AMH,AMTOP,GAMMZ
01034 
01035 
01036 
01037 
01038 
01039 
01040       ENE=SQRT(SVAR)/2
01041       AMIN=0.511D-3
01042       SWSQ=0.23147
01043       AMZ=91.1882
01044       GAMMZ=2.4952
01045       IF     (IDFX.EQ. 15) then       
01046         IDF=2  
01047         AMFIN=1.77703 
01048       ELSEIF (IDFX.EQ.-15) then
01049         IDF=-2  
01050         AMFIN=1.77703 
01051       ELSE
01052         WRITE(*,*) 'INITWK: WRONG IDFX'
01053         STOP
01054       ENDIF
01055 
01056       IF     (IDEX.EQ. 11) then      
01057         IDE= 2
01058         AMIN=0.511D-3
01059       ELSEIF (IDEX.EQ.-11) then      
01060         IDE=-2
01061         AMIN=0.511D-3
01062       ELSEIF (IDEX.EQ. 13) then      
01063         IDE= 2
01064         AMIN=0.105659
01065       ELSEIF (IDEX.EQ.-13) then      
01066         IDE=-2
01067         AMIN=0.105659
01068       ELSEIF (IDEX.EQ.  1) then      
01069         IDE= 4
01070         AMIN=0.05
01071       ELSEIF (IDEX.EQ.- 1) then      
01072         IDE=-4
01073         AMIN=0.05
01074       ELSEIF (IDEX.EQ.  2) then      
01075         IDE= 3
01076         AMIN=0.02
01077       ELSEIF (IDEX.EQ.- 2) then      
01078         IDE=-3
01079         AMIN=0.02
01080       ELSEIF (IDEX.EQ.  3) then      
01081         IDE= 4
01082         AMIN=0.3
01083       ELSEIF (IDEX.EQ.- 3) then      
01084         IDE=-4
01085         AMIN=0.3
01086       ELSEIF (IDEX.EQ.  4) then      
01087         IDE= 3
01088         AMIN=1.3
01089       ELSEIF (IDEX.EQ.- 4) then      
01090         IDE=-3
01091         AMIN=1.3
01092       ELSEIF (IDEX.EQ.  5) then      
01093         IDE= 4
01094         AMIN=4.5
01095       ELSEIF (IDEX.EQ.- 5) then      
01096         IDE=-4
01097         AMIN=4.5
01098       ELSEIF (IDEX.EQ.  12) then     
01099         IDE= 1
01100         AMIN=0.1D-3
01101       ELSEIF (IDEX.EQ.- 12) then     
01102         IDE=-1
01103         AMIN=0.1D-3
01104       ELSEIF (IDEX.EQ.  14) then     
01105         IDE= 1
01106         AMIN=0.1D-3
01107       ELSEIF (IDEX.EQ.- 14) then     
01108         IDE=-1
01109         AMIN=0.1D-3
01110       ELSEIF (IDEX.EQ.  16) then     
01111         IDE= 1
01112         AMIN=0.1D-3
01113       ELSEIF (IDEX.EQ.- 16) then     
01114         IDE=-1
01115         AMIN=0.1D-3
01116 
01117       ELSE
01118         WRITE(*,*) 'INITWK: WRONG IDEX'
01119         STOP
01120       ENDIF
01121 
01122 
01123 
01124 
01125 
01126 
01127 
01128       ITCE=IDE/IABS(IDE)
01129       JTCE=(1-ITCE)/2
01130       ITCF=IDF/IABS(IDF)
01131       JTCF=(1-ITCF)/2
01132       CALL T_GIVIZO( IDE, 1,AIZOR,QE,KDUMM)
01133       CALL T_GIVIZO( IDE,-1,AIZOL,QE,KDUMM)
01134       XUPGI(1)=QE
01135       XUPGI(2)=QE
01136       T3E    = AIZOL+AIZOR
01137       XUPZI(1)=(AIZOR-QE*SWSQ)/SQRT(SWSQ*(1-SWSQ))
01138       XUPZI(2)=(AIZOL-QE*SWSQ)/SQRT(SWSQ*(1-SWSQ))
01139       CALL T_GIVIZO( IDF, 1,AIZOR,QF,KOLOR)
01140       CALL T_GIVIZO( IDF,-1,AIZOL,QF,KOLOR)
01141       XUPGF(1)=QF
01142       XUPGF(2)=QF
01143       T3F    =  AIZOL+AIZOR
01144       XUPZF(1)=(AIZOR-QF*SWSQ)/SQRT(SWSQ*(1-SWSQ))
01145       XUPZF(2)=(AIZOL-QF*SWSQ)/SQRT(SWSQ*(1-SWSQ))
01146 
01147       NDIAG0=2
01148       NDIAGA=11
01149       KEYA  = 1
01150       KEYZ  = 1
01151 
01152 
01153       RETURN
01154       END
01155 
01156       SUBROUTINE T_GIVIZO(IDFERM,IHELIC,SIZO3,CHARGE,KOLOR)
01157 
01158 
01159 
01160 
01161 
01162 
01163 
01164 
01165 
01166 
01167 
01168       IMPLICIT REAL*8(A-H,O-Z)
01169 
01170       IF(IDFERM.EQ.0.OR.IABS(IDFERM).GT.4) GOTO 901
01171       IF(IABS(IHELIC).NE.1)                GOTO 901
01172       IH  =IHELIC
01173       IDTYPE =IABS(IDFERM)
01174       IC  =IDFERM/IDTYPE
01175       LEPQUA=INT(IDTYPE*0.4999999D0)
01176       IUPDOW=IDTYPE-2*LEPQUA-1
01177       CHARGE  =(-IUPDOW+2D0/3D0*LEPQUA)*IC
01178       SIZO3   =0.25D0*(IC-IH)*(1-2*IUPDOW)
01179       KOLOR=1+2*LEPQUA
01180 
01181 
01182       RETURN
01183  901  PRINT *,' STOP IN GIVIZO: WRONG PARAMS.'
01184       STOP
01185       END
01186       SUBROUTINE PHYFIX(NSTOP,NSTART)
01187       COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5) 
01188       SAVE /LUJETS/ 
01189 
01190       NSTOP=0
01191       NSTART=1
01192       DO I=1, N
01193        IF(K(I,1).NE.21) THEN
01194            NSTOP = I-1
01195            NSTART= I
01196            GOTO 500
01197        ENDIF
01198       ENDDO
01199  500  CONTINUE
01200       END
01201       SUBROUTINE FILHEP(N,IST,ID,JMO1,JMO2,JDA1,JDA2,P4,PINV,PHFLAG)
01202 
01203 
01204 
01205 
01206 
01207 
01208 
01209 
01210 
01211 
01212 
01213       INTEGER NMXHEP
01214       PARAMETER (NMXHEP=10000)
01215       REAL*8  phep,  vhep 
01216       INTEGER nevhep,nhep,isthep,idhep,jmohep,
01217      $        jdahep
01218       COMMON /hepevt/
01219      $      nevhep,               
01220      $      nhep,                 
01221      $      isthep(nmxhep),   
01222      $      idhep(nmxhep),    
01223      $      jmohep(2,nmxhep), 
01224      $      jdahep(2,nmxhep), 
01225      $      phep(5,nmxhep),   
01226      $      vhep(4,nmxhep)    
01227 
01228       LOGICAL qedrad
01229       COMMON /phoqed/ 
01230      $     qedrad(nmxhep)    
01231 
01232       SAVE hepevt,phoqed
01233       LOGICAL PHFLAG
01234 
01235       REAL*4  P4(4)
01236 
01237 
01238       IF (N.EQ.0) THEN
01239 
01240 
01241         IHEP=NHEP+1
01242       ELSE IF (N.GT.0) THEN
01243 
01244 
01245         IHEP=N
01246       ELSE
01247 
01248 
01249         IHEP=NHEP+N
01250       END IF
01251 
01252 
01253       IF ((IHEP.LE.0).OR.(IHEP.GT.NMXHEP)) RETURN
01254 
01255 
01256       NHEP=IHEP
01257       ISTHEP(IHEP)=IST
01258       IDHEP(IHEP)=ID
01259       JMOHEP(1,IHEP)=JMO1
01260       IF(JMO1.LT.0)JMOHEP(1,IHEP)=JMOHEP(1,IHEP)+IHEP
01261       JMOHEP(2,IHEP)=JMO2
01262       IF(JMO2.LT.0)JMOHEP(2,IHEP)=JMOHEP(2,IHEP)+IHEP
01263       JDAHEP(1,IHEP)=JDA1
01264       JDAHEP(2,IHEP)=JDA2
01265 
01266       DO I=1,4
01267         PHEP(I,IHEP)=P4(I)
01268 
01269 
01270         VHEP(I,IHEP)=0.0
01271       END DO
01272       PHEP(5,IHEP)=PINV
01273 
01274       QEDRAD(IHEP)=PHFLAG
01275 
01276 
01277       DO IP=JMOHEP(1,IHEP),JMOHEP(2,IHEP)
01278         IF(IP.GT.0)THEN
01279 
01280 
01281           IF(ISTHEP(IP).EQ.1)ISTHEP(IP)=2
01282 
01283 
01284           IF(JDAHEP(1,IP).EQ.0)THEN
01285             JDAHEP(1,IP)=IHEP
01286             JDAHEP(2,IP)=IHEP
01287           ELSE
01288             JDAHEP(2,IP)=MAX(IHEP,JDAHEP(2,IP))
01289           END IF
01290         END IF
01291       END DO
01292 
01293       RETURN
01294       END
01295 
01296 
01297       FUNCTION IHEPDIM(DUM) 
01298 
01299 
01300       INTEGER NMXHEP
01301       PARAMETER (NMXHEP=10000)
01302       REAL*8  phep,  vhep 
01303       INTEGER nevhep,nhep,isthep,idhep,jmohep,
01304      $        jdahep
01305       COMMON /hepevt/
01306      $      nevhep,               
01307      $      nhep,                 
01308      $      isthep(nmxhep),   
01309      $      idhep(nmxhep),    
01310      $      jmohep(2,nmxhep), 
01311      $      jdahep(2,nmxhep), 
01312      $      phep(5,nmxhep),   
01313      $      vhep(4,nmxhep)    
01314 
01315       LOGICAL qedrad
01316       COMMON /phoqed/ 
01317      $     qedrad(nmxhep)    
01318 
01319       SAVE hepevt,phoqed
01320       IHEPDIM=NHEP
01321       END
01322       FUNCTION ZPROP2(S)
01323       IMPLICIT REAL*8(A-H,O-Z)
01324       COMPLEX*16 CPRZ0,CPRZ0M
01325       AMZ=91.1882
01326       GAMMZ=2.49
01327       CPRZ0=DCMPLX((S-AMZ**2),S/AMZ*GAMMZ)
01328       CPRZ0M=1/CPRZ0
01329       ZPROP2=(ABS(CPRZ0M))**2
01330       END
01331 
01332       SUBROUTINE TAUPI0(MODE,JAK,ION)
01333 
01334 
01335 
01336 
01337 
01338 
01339 
01340 
01341 
01342 
01343 
01344 
01345       INTEGER NMXHEP
01346       PARAMETER (NMXHEP=10000)
01347       REAL*8  phep,  vhep 
01348       INTEGER nevhep,nhep,isthep,idhep,jmohep,
01349      $        jdahep
01350       COMMON /hepevt/
01351      $      nevhep,               
01352      $      nhep,                 
01353      $      isthep(nmxhep),   
01354      $      idhep(nmxhep),    
01355      $      jmohep(2,nmxhep), 
01356      $      jdahep(2,nmxhep), 
01357      $      phep(5,nmxhep),   
01358      $      vhep(4,nmxhep)    
01359 
01360       LOGICAL qedrad
01361       COMMON /phoqed/ 
01362      $     qedrad(nmxhep)    
01363 
01364       SAVE hepevt,phoqed
01365 
01366 
01367       COMMON /TAUPOS/ NP1,NP2
01368 
01369       REAL  PHOT1(4),PHOT2(4)
01370       REAL*8  R,X(4),Y(4),PI0(4)
01371       INTEGER JEZELI(3),ION(3)
01372       DATA JEZELI /0,0,0/
01373       SAVE JEZELI
01374       IF (MODE.EQ.-1) THEN
01375         JEZELI(1)=ION(1)
01376         JEZELI(2)=ION(2)
01377         JEZELI(3)=ION(3)
01378         RETURN
01379       ENDIF
01380       IF (JEZELI(1).EQ.0) RETURN
01381       IF (JEZELI(2).EQ.1) CALL TAUETA(JAK)
01382       IF (JEZELI(3).EQ.1) CALL TAUK0S(JAK)
01383 
01384       IF((KTO.EQ. 1).OR.(KTO.EQ.11)) THEN
01385         NPS=NP1
01386       ELSE
01387         NPS=NP2
01388       ENDIF
01389       nhepM=nhep                
01390       DO K=JDAHEP(1,NPS),nhepM  
01391        IF (IDHEP(K).EQ.111.AND.JDAHEP(1,K).LE.K) THEN 
01392         DO L=1,4
01393           PI0(L)= phep(L,K)
01394         ENDDO
01395 
01396         R=SQRT(PI0(4)**2-PI0(3)**2-PI0(2)**2-PI0(1)**2)/2D0
01397         CALL SPHERD(R,X)
01398         X(4)=R
01399         Y(4)=R
01400         
01401         Y(1)=-X(1)
01402         Y(2)=-X(2)
01403         Y(3)=-X(3)
01404 
01405         CALL bostdq(-1,PI0,X,X)
01406         CALL bostdq(-1,PI0,Y,Y)
01407         DO L=1,4
01408          PHOT1(L)=X(L)
01409          PHOT2(L)=Y(L)
01410         ENDDO
01411 
01412         CALL FILHEP(0,1,22,K,K,0,0,PHOT1,0.0,.TRUE.)
01413         CALL FILHEP(0,1,22,K,K,0,0,PHOT2,0.0,.TRUE.)
01414        ENDIF
01415       ENDDO
01416 
01417       END
01418       SUBROUTINE TAUETA(JAK)
01419 
01420 
01421 
01422 
01423 
01424 
01425       INTEGER NMXHEP
01426       PARAMETER (NMXHEP=10000)
01427       REAL*8  phep,  vhep 
01428       INTEGER nevhep,nhep,isthep,idhep,jmohep,
01429      $        jdahep
01430       COMMON /hepevt/
01431      $      nevhep,               
01432      $      nhep,                 
01433      $      isthep(nmxhep),   
01434      $      idhep(nmxhep),    
01435      $      jmohep(2,nmxhep), 
01436      $      jdahep(2,nmxhep), 
01437      $      phep(5,nmxhep),   
01438      $      vhep(4,nmxhep)    
01439 
01440       LOGICAL qedrad
01441       COMMON /phoqed/ 
01442      $     qedrad(nmxhep)    
01443 
01444       SAVE hepevt,phoqed
01445       COMMON / PARMAS / AMTAU,AMNUTA,AMEL,AMNUE,AMMU,AMNUMU
01446      *                 ,AMPIZ,AMPI,AMRO,GAMRO,AMA1,GAMA1
01447      *                 ,AMK,AMKZ,AMKST,GAMKST
01448 
01449       REAL*4            AMTAU,AMNUTA,AMEL,AMNUE,AMMU,AMNUMU
01450      *                 ,AMPIZ,AMPI,AMRO,GAMRO,AMA1,GAMA1
01451      *                 ,AMK,AMKZ,AMKST,GAMKST
01452 
01453 
01454       COMMON /TAUPOS/ NP1,NP2
01455 
01456       REAL  RRR(1),BRSUM(3), RR(2)
01457       REAL  PHOT1(4),PHOT2(4),PHOT3(4)
01458       REAL*8    X(4),    Y(4),    Z(4)
01459       REAL                                YM1,YM2,YM3
01460       REAL*8  R,RU,PETA(4),XM1,XM2,XM3,XM,XLAM
01461       REAL*8 a,b,c
01462       XLAM(a,b,c)=SQRT(ABS((a-b-c)**2-4.0*b*c))
01463 
01464       IF((KTO.EQ. 1).OR.(KTO.EQ.11)) THEN
01465         NPS=NP1
01466       ELSE
01467         NPS=NP2
01468       ENDIF
01469       nhepM=nhep                
01470       DO K=JDAHEP(1,NPS),nhepM  
01471        IF (IDHEP(K).EQ.221.AND.JDAHEP(1,K).LE.K) THEN 
01472         DO L=1,4
01473           PETA(L)= phep(L,K)  
01474         ENDDO
01475 
01476         BRSUM(1)=0.389  
01477         BRSUM(2)=BRSUM(1)+0.319  
01478         BRSUM(3)=BRSUM(2)+0.237  
01479         CALL RANMAR(RRR,1) 
01480         
01481         IF (RRR(1).LT.BRSUM(1)) THEN 
01482 
01483          R=SQRT(PETA(4)**2-PETA(3)**2-PETA(2)**2-PETA(1)**2)/2D0
01484          CALL SPHERD(R,X) 
01485          X(4)=R
01486          Y(4)=R
01487         
01488          Y(1)=-X(1)
01489          Y(2)=-X(2)
01490          Y(3)=-X(3)
01491 
01492          CALL bostdq(-1,PETA,X,X)  
01493          CALL bostdq(-1,PETA,Y,Y)
01494          DO L=1,4
01495           PHOT1(L)=X(L)
01496           PHOT2(L)=Y(L)
01497          ENDDO
01498 
01499          CALL FILHEP(0,1,22,K,K,0,0,PHOT1,0.0,.TRUE.)
01500          CALL FILHEP(0,1,22,K,K,0,0,PHOT2,0.0,.TRUE.)
01501         ELSE 
01502          IF(RRR(1).LT.BRSUM(2)) THEN  
01503           ID1= 111
01504           ID2= 111
01505           ID3= 111
01506           XM1=AMPIZ 
01507           XM2=AMPIZ
01508           XM3=AMPIZ
01509          ELSEIF(RRR(1).LT.BRSUM(3)) THEN 
01510           ID1= 211
01511           ID2=-211
01512           ID3= 111
01513           XM1=AMPI 
01514           XM2=AMPI
01515           XM3=AMPIZ
01516          ELSE                            
01517           ID1= 211
01518           ID2=-211
01519           ID3=  22
01520           XM1=AMPI 
01521           XM2=AMPI
01522           XM3=0.0
01523          ENDIF
01524  7       CONTINUE  
01525           CALL RANMAR(RR,2)
01526           R=SQRT(PETA(4)**2-PETA(3)**2-PETA(2)**2-PETA(1)**2)
01527           AMIN=XM1+XM2
01528           AMAX=R-XM3
01529           AM2=SQRT(AMIN**2+RR(1)*(AMAX**2-AMIN**2))
01530 
01531           WT=XLAM(1D0*R**2,1D0*AM2**2,1D0*XM3**2)
01532      &      *XLAM(1D0*AM2**2,1D0*XM1**2,1D0*XM2**2)
01533      &           /R**2                    /AM2**2
01534          IF (RR(2).GT.WT) GOTO 7
01535 
01536          RU=XLAM(1D0*AM2**2,1D0*XM1**2,1D0*XM2**2)/AM2/2  
01537                                               
01538                                               
01539          CALL SPHERD(RU,X)
01540          X(4)=SQRT(RU**2+XM1**2)
01541          Y(4)=SQRT(RU**2+XM2**2)
01542         
01543          Y(1)=-X(1)
01544          Y(2)=-X(2)
01545          Y(3)=-X(3)
01546 
01547          RU=XLAM(1D0*R**2,1D0*AM2**2,1D0*XM3**2)/R/2
01548          CALL SPHERD(RU,Z)
01549          Z(4)=SQRT(RU**2+AM2**2)
01550 
01551          CALL bostdq(-1,Z,X,X)
01552          CALL bostdq(-1,Z,Y,Y)
01553 
01554          Z(1)=-Z(1)
01555          Z(2)=-Z(2)
01556          Z(3)=-Z(3)
01557          Z(4)=SQRT(RU**2+XM3**2)
01558 
01559          CALL bostdq(-1,PETA,X,X)
01560          CALL bostdq(-1,PETA,Y,Y)
01561          CALL bostdq(-1,PETA,Z,Z)
01562          DO L=1,4
01563           PHOT1(L)=X(L)
01564           PHOT2(L)=Y(L)
01565           PHOT3(L)=Z(L)
01566          ENDDO
01567          YM1=XM1
01568          YM2=XM2
01569          YM3=XM3
01570 
01571          CALL FILHEP(0,1,ID1,K,K,0,0,PHOT1,YM1,.TRUE.)
01572          CALL FILHEP(0,1,ID2,K,K,0,0,PHOT2,YM2,.TRUE.)
01573          CALL FILHEP(0,1,ID3,K,K,0,0,PHOT3,YM3,.TRUE.)
01574         ENDIF
01575 
01576        ENDIF
01577       ENDDO
01578 
01579       END
01580       SUBROUTINE TAUK0S(JAK)
01581 
01582 
01583 
01584 
01585 
01586 
01587       INTEGER NMXHEP
01588       PARAMETER (NMXHEP=10000)
01589       REAL*8  phep,  vhep 
01590       INTEGER nevhep,nhep,isthep,idhep,jmohep,
01591      $        jdahep
01592       COMMON /hepevt/
01593      $      nevhep,               
01594      $      nhep,                 
01595      $      isthep(nmxhep),   
01596      $      idhep(nmxhep),    
01597      $      jmohep(2,nmxhep), 
01598      $      jdahep(2,nmxhep), 
01599      $      phep(5,nmxhep),   
01600      $      vhep(4,nmxhep)    
01601 
01602       LOGICAL qedrad
01603       COMMON /phoqed/ 
01604      $     qedrad(nmxhep)    
01605 
01606       SAVE hepevt,phoqed
01607 
01608       COMMON / PARMAS / AMTAU,AMNUTA,AMEL,AMNUE,AMMU,AMNUMU
01609      *                 ,AMPIZ,AMPI,AMRO,GAMRO,AMA1,GAMA1
01610      *                 ,AMK,AMKZ,AMKST,GAMKST
01611 
01612       REAL*4            AMTAU,AMNUTA,AMEL,AMNUE,AMMU,AMNUMU
01613      *                 ,AMPIZ,AMPI,AMRO,GAMRO,AMA1,GAMA1
01614      *                 ,AMK,AMKZ,AMKST,GAMKST
01615 
01616 
01617       COMMON /TAUPOS/ NP1,NP2
01618 
01619       REAL  RRR(1),BRSUM(3), RR(2)
01620       REAL  PHOT1(4),PHOT2(4),PHOT3(4)
01621       REAL*8    X(4),    Y(4),    Z(4)
01622       REAL                                YM1,YM2,YM3
01623       REAL*8  R,RU,PETA(4),XM1,XM2,XM3,XM,XLAM
01624       REAL*8 a,b,c
01625       XLAM(a,b,c)=SQRT(ABS((a-b-c)**2-4.0*b*c))
01626 
01627       IF((KTO.EQ. 1).OR.(KTO.EQ.11)) THEN
01628         NPS=NP1
01629       ELSE
01630         NPS=NP2
01631       ENDIF
01632       nhepM=nhep                
01633       DO K=JDAHEP(1,NPS),nhepM  
01634        IF (IDHEP(K).EQ.310.AND.JDAHEP(1,K).LE.K) THEN 
01635 
01636       
01637         DO L=1,4
01638           PETA(L)= phep(L,K)  
01639         ENDDO
01640 
01641         BRSUM(1)=0.313  
01642         BRSUM(2)=1.0 
01643         BRSUM(3)=BRSUM(2)+0.237  
01644         CALL RANMAR(RRR,1) 
01645 
01646          IF(RRR(1).LT.BRSUM(1)) THEN  
01647           ID1= 111
01648           ID2= 111
01649           XM1=AMPIZ 
01650           XM2=AMPIZ
01651          ELSEIF(RRR(1).LT.BRSUM(2)) THEN 
01652           ID1= 211
01653           ID2=-211
01654           XM1=AMPI 
01655           XM2=AMPI
01656          ELSE                            
01657           ID1= 22
01658           ID2= 22
01659           XM1= 0.0 
01660           XM2= 0.0
01661          ENDIF
01662         
01663 
01664          R=SQRT(PETA(4)**2-PETA(3)**2-PETA(2)**2-PETA(1)**2)/2D0
01665          R4=R
01666          R=SQRT(ABS(R**2-XM1**2))
01667          CALL SPHERD(R,X) 
01668          X(4)=R4
01669          Y(4)=R4
01670         
01671          Y(1)=-X(1)
01672          Y(2)=-X(2)
01673          Y(3)=-X(3)
01674 
01675          CALL bostdq(-1,PETA,X,X)  
01676          CALL bostdq(-1,PETA,Y,Y)
01677          DO L=1,4
01678           PHOT1(L)=X(L)
01679           PHOT2(L)=Y(L)
01680          ENDDO
01681 
01682          YM1=XM1
01683          YM2=XM2
01684 
01685          CALL FILHEP(0,1,ID1,K,K,0,0,PHOT1,YM1,.TRUE.)
01686          CALL FILHEP(0,1,ID2,K,K,0,0,PHOT2,YM2,.TRUE.)
01687 
01688 
01689        ENDIF
01690       ENDDO
01691 
01692       END