C...Example how to set and have documented the main parameters that
C...determine e+e- -> W+W- event generation (for LEP 2).
C...Part of a call for standardization during the LEP 2 workshop.

      COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
      DIMENSION PGAM(4) 

C...Main parameters of run: c.m. energy and number of events.
      ECM=175.
      NEV=5000

C...Specify desired parameter values.
      WMASS=80.22
      ALPHAH=1./128.
      ALPHAS=0.123
      IRAD=0
      CALL PYWSET(WMASS,ALPHAH,ALPHAS,IRAD)

C...Initialize.
      CALL PYINIT('CMS','e+','e-',ECM)
      EGAM=0.
      PZGAM=0.
      PTGAM=0.  

C...Print values of parameters set (PYWGET must be called after PYINIT).
      CALL PYWGET

C...Generate a few events.
      DO 200 IEV=1,NEV
      CALL PYEVNT
c      IF(IEV.LE.5) CALL LULIST(1)

C...Do statistics on photon emission.
      DO 100 J=1,4
  100 PGAM(J)=0.
      DO 120 I=1,N
      IF(K(I,2).EQ.22.AND.K(I,3).LE.4) THEN
        DO 110 J=1,4
  110   PGAM(J)=PGAM(J)+P(I,J)
      ENDIF
  120 CONTINUE
      EGAM=EGAM+PGAM(4)
      PZGAM=PZGAM+ABS(PGAM(3))
      PTGAM=PTGAM+SQRT(PGAM(1)**2+PGAM(2)**2)      
  200 CONTINUE

C...Print final cross section and photon statistics.
      CALL PYSTAT(1)
      WRITE(6,'(A,F10.3)') 'Average total E of emitted photons =',
     &EGAM/NEV
      WRITE(6,'(A,F10.3)') 'Ditto abs(sum p_longitudinal)      =',
     &PZGAM/NEV
      WRITE(6,'(A,F10.3)') 'Ditto abs(sum p_T(vectorial))      =',
     &PTGAM/NEV    

      END

C********************************************************************* 

      SUBROUTINE PYWSET(WMASS,ALPHAH,ALPHAS,IRAD)
C...A subroutine to set parameters for WW pair generation, to be used
C...for comparison purposes. It also indicates some of the additional
C...degrees of freedom available for the PYTHIA generation.
C...WMASS = the desired W mass value.
C...ALPHAH = alpha_em evaluated at the scale of the hard process.
C...ALPHAS = alpha_s evaluated at the scale of W decay.
C...IRAD = 0 or 1 for without/with initial state QED radiation.

      COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
      COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4) 
      COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5) 
      COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200) 
      COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200) 
      SAVE /LUDAT1/,/LUDAT2/,/LUDAT3/
      SAVE /PYSUBS/,/PYPARS/

C...Set W and Z masses.
      PMAS(24,1)=WMASS
      PMAS(23,1)=91.187

C...Fixed alpha_strong value given by user input. 
      MSTP(2)=0
      PARU(111)=ALPHAS

C...Fixed alpha_em value value given by user input.
      MSTU(101)=2
      PARU(103)=ALPHAH
      PARU(104)=1. 

C...Decide on internal set of electroweak parameters in PYTHIA:
C...MSTP(8)=0 : use alpha_em(Q2)
C...       =1 : translate alpha_em -> sqrt(2)*G_F*m_W^2*sin2(t_W)/pi.
C...       =2 : also translate sin2(t_W) -> 1.-(m_W/m_Z)^2 except in
C...            v = a - 4 sin2(t_W) e.
      MSTP(8)=1

C...Calculate sin2(theta_W) from G_F and m_W.
C...Done automatically for MSTP(8)>=1, so not needed any longer.
c      GF=PARU(105)
c      PI=3.141593
c      SIN2TW=PI*ALPHAH/(SQRT(2.)*WMASS**2*GF)
c      PARU(102)=SIN2TW  
      
C...Select W pair production only.
      MSEL=0
      MSUB(25)=1

C...Switch off or on initial state QED radiation.
      IF(IRAD.LE.0) THEN
        MSTP(11)=0
        MSTP(61)=0
      ELSE
        MSTP(11)=1
        MSTP(61)=1
      ENDIF

C...Set scale of hard process to be s-hat for consistency with 
C...initial state radiation of Excalibur. (Not so important in
C...practice!)
      MSTP(32)=4

C...Switch off QCD showers and fragmentation - irrelevent for
C...comparison with electroweak generators.
      MSTP(71)=0
      MSTP(111)=0

      RETURN
      END

C********************************************************************* 

      SUBROUTINE PYWGET
C...A subroutine to write some of the parameters used for WW generation
C...in PYTHIA.

      COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
      COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4) 
      COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5) 
      COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200) 
      COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200) 
      SAVE /LUDAT1/,/LUDAT2/,/LUDAT3/
      SAVE /PYSUBS/,/PYPARS/

C...Write alpha_strong, alpha_em and sin2(theta_W).
      WRITE(6,'(//A)') ' Parameter survey by PYWGET:'
      PI=3.141593
      GF=PARU(105)
      ALPS=ULALPS(PMAS(23,1)**2)
      WRITE(6,'(/A,F10.6)') ' alpha_strong; fixed value used here:',
     &ALPS 
      ALEM=ULALEM(0.)
      WRITE(6,'(A,F10.6,F10.2)') 
     &' alpha_em and 1/alpha_em at Q2=0:    ',ALEM,1./ALEM
      ALEM=ULALEM(PMAS(24,1)**2)
      WRITE(6,'(A,F10.6,F10.2)') 
     &' alpha_em and 1/alpha_em at large Q2:',ALEM,1./ALEM
      SIN2TW=PARU(102) 
      WRITE(6,'(A,F10.6)') ' sin2(theta_W); derived from G_F etc:',
     &SIN2TW

C...Write W and Z mass and width.
      WRITE(6,'(/A,F10.3)') ' W mass, set by user in PYWSET:      ',
     &PMAS(24,1)
      WRITE(6,'(A,F10.3)') ' W width, calculated, s-dependent:   ',
     &PMAS(24,2)  
      WRITE(6,'(A,F10.3)') ' Z mass, set to PDG value in PYWSET: ',
     &PMAS(23,1)
      WRITE(6,'(A,F10.3)') ' Z width, calculated, s-dependent:   ',
     &PMAS(23,2) 

C...W partial widths: how they come about.
      COMFC0=ALEM*PMAS(24,1)/(12.*SIN2TW) 
      COMFC1=GF*PMAS(24,1)**3/(6.*SQRT(2.)*PI)
      WRITE(6,'(/A)') ' Common prefactor in all W partial widths:'
      WRITE(6,'(A,F10.4)') ' alpha_em*m_W/(12*sin2(theta_W):      ',
     &COMFC0
      WRITE(6,'(A,F10.4)') ' G_F*m_W**3/(6*sqrt(2)*pi)            ',
     &COMFC1
      COMFAC=COMFC0
      IF(MSTP(8).EQ.1) COMFAC=COMFC1
      COLFAC=3.*(1.+ALPS/PI)
      WRITE(6,'(A,F10.4)') ' Quark colour factor 3*(1+alpha_s/pi) ',
     &COLFAC
      WRITE(6,'(A)') ' Fermion pair Cabbibo factor and partial width ='
      WRITE(6,'(A)') ' prefactor * colour factor * Cabbibo, '
      WRITE(6,'(A)') ' final column also with phase space suppression:'
      WRITE(6,'(A,3F10.5)') ' u + dbar',VCKM(1,1),
     &COMFAC*COLFAC*VCKM(1,1),PMAS(24,2)*BRAT(172) 
      WRITE(6,'(A,3F10.5)') ' c + dbar',VCKM(2,1),
     &COMFAC*COLFAC*VCKM(2,1),PMAS(24,2)*BRAT(173) 
      WRITE(6,'(A,3F10.5)') ' u + sbar',VCKM(1,2),
     &COMFAC*COLFAC*VCKM(1,2),PMAS(24,2)*BRAT(176) 
      WRITE(6,'(A,3F10.5)') ' c + sbar',VCKM(2,2),
     &COMFAC*COLFAC*VCKM(2,2),PMAS(24,2)*BRAT(177) 
      WRITE(6,'(A,3F10.5)') ' u + bbar',VCKM(1,3),
     &COMFAC*COLFAC*VCKM(1,3),PMAS(24,2)*BRAT(180) 
      WRITE(6,'(A,3F10.5)') ' c + bbar',VCKM(2,3),
     &COMFAC*COLFAC*VCKM(2,3),PMAS(24,2)*BRAT(181) 
      WRITE(6,'(A,3F10.5)') ' e + nu  ',1.,COMFAC,PMAS(24,2)*BRAT(188)
      WRITE(6,'(A,3F10.5)') ' mu + nu ',1.,COMFAC,PMAS(24,2)*BRAT(189)
      WRITE(6,'(A,3F10.5)') ' tau + nu',1.,COMFAC,PMAS(24,2)*BRAT(190)

C...Z couplings.
      WRITE(6,'(/A)') 
     &' electron couplings to Z calculated from sin2(theta_W):'
      WRITE(6,'(A,3F10.5)') ' e_e, a_e, v_e: ',-1.,-1.,-1.+4.*SIN2TW

      RETURN
      END             
