Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:21:12

0001 
0002 
0003 C*********************************************************************
0004 
0005 C...Combine the two old-style Pythia initialization and event files
0006 C...into a single Les Houches Event File.
0007 
0008       SUBROUTINE PYLHEF
0009  
0010 C...Double precision and integer declarations.
0011       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0012       IMPLICIT INTEGER(I-N)
0013  
0014 C...PYTHIA commonblock: only used to provide read/write units and version.
0015       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0016       SAVE /PYPARS/
0017  
0018 C...User process initialization commonblock.
0019       INTEGER MAXPUP
0020       PARAMETER (MAXPUP=100)
0021       INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0022       DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0023       COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0024      &IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0025      &LPRUP(MAXPUP)
0026       SAVE /HEPRUP/
0027  
0028 C...User process event common block.
0029       INTEGER MAXNUP
0030       PARAMETER (MAXNUP=500)
0031       INTEGER NUP,IDPRUP,IDUP,ISTUP,MOTHUP,ICOLUP
0032       DOUBLE PRECISION XWGTUP,SCALUP,AQEDUP,AQCDUP,PUP,VTIMUP,SPINUP
0033       COMMON/HEPEUP/NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP,IDUP(MAXNUP),
0034      &ISTUP(MAXNUP),MOTHUP(2,MAXNUP),ICOLUP(2,MAXNUP),PUP(5,MAXNUP),
0035      &VTIMUP(MAXNUP),SPINUP(MAXNUP)
0036       SAVE /HEPEUP/
0037 
0038 C...Lines to read in assumed never longer than 200 characters. 
0039       PARAMETER (MAXLEN=200)
0040       CHARACTER*(MAXLEN) STRING
0041 
0042 C...Format for reading lines.
0043       CHARACTER*6 STRFMT
0044       STRFMT='(A000)'
0045       WRITE(STRFMT(3:5),'(I3)') MAXLEN
0046 
0047 C...Rewind initialization and event files. 
0048       REWIND MSTP(161)
0049       REWIND MSTP(162)
0050 
0051 C...Write header info.
0052       WRITE(MSTP(163),'(A)') '<LesHouchesEvents version="1.0">'
0053       WRITE(MSTP(163),'(A)') '<!--'
0054       WRITE(MSTP(163),'(A,I1,A1,I3)') 'File generated with PYTHIA ',
0055      &MSTP(181),'.',MSTP(182)
0056       WRITE(MSTP(163),'(A)') '-->'       
0057 
0058 C...Read first line of initialization info and get number of processes.
0059       READ(MSTP(161),'(A)',END=400,ERR=400) STRING                  
0060       READ(STRING,*,ERR=400) IDBMUP(1),IDBMUP(2),EBMUP(1),
0061      &EBMUP(2),PDFGUP(1),PDFGUP(2),PDFSUP(1),PDFSUP(2),IDWTUP,NPRUP
0062 
0063 C...Copy initialization lines, omitting trailing blanks. 
0064 C...Embed in <init> ... </init> block.
0065       WRITE(MSTP(163),'(A)') '<init>' 
0066       DO 140 IPR=0,NPRUP
0067         IF(IPR.GT.0) READ(MSTP(161),'(A)',END=400,ERR=400) STRING
0068         LEN=MAXLEN+1  
0069   120   LEN=LEN-1
0070         IF(LEN.GT.1.AND.STRING(LEN:LEN).EQ.' ') GOTO 120
0071         WRITE(MSTP(163),'(A)',ERR=400) STRING(1:LEN)
0072   140 CONTINUE
0073       WRITE(MSTP(163),'(A)') '</init>' 
0074 
0075 C...Begin event loop. Read first line of event info or already done.
0076       READ(MSTP(162),'(A)',END=320,ERR=400) STRING    
0077   200 CONTINUE
0078 
0079 C...Look at first line to know number of particles in event.
0080       READ(STRING,*,ERR=400) NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP
0081 
0082 C...Begin an <event> block. Copy event lines, omitting trailing blanks. 
0083       WRITE(MSTP(163),'(A)') '<event>' 
0084       DO 240 I=0,NUP
0085         IF(I.GT.0) READ(MSTP(162),'(A)',END=400,ERR=400) STRING
0086         LEN=MAXLEN+1  
0087   220   LEN=LEN-1
0088         IF(LEN.GT.1.AND.STRING(LEN:LEN).EQ.' ') GOTO 220
0089         WRITE(MSTP(163),'(A)',ERR=400) STRING(1:LEN)
0090   240 CONTINUE
0091               
0092 C...Copy trailing comment lines - with a # in the first column - as is.
0093   260 READ(MSTP(162),'(A)',END=300,ERR=400) STRING    
0094       IF(STRING(1:1).EQ.'#') THEN
0095         LEN=MAXLEN+1  
0096   280   LEN=LEN-1
0097         IF(LEN.GT.1.AND.STRING(LEN:LEN).EQ.' ') GOTO 280
0098         WRITE(MSTP(163),'(A)',ERR=400) STRING(1:LEN)
0099         GOTO 260
0100       ENDIF
0101 
0102 C..End the <event> block. Loop back to look for next event.
0103       WRITE(MSTP(163),'(A)') '</event>' 
0104       GOTO 200
0105 
0106 C...Successfully reached end of event loop: write closing tag
0107 C...and remove temporary intermediate files (unless asked not to).
0108   300 WRITE(MSTP(163),'(A)') '</event>' 
0109   320 WRITE(MSTP(163),'(A)') '</LesHouchesEvents>' 
0110       IF(MSTP(164).EQ.1) RETURN
0111       CLOSE(MSTP(161),ERR=400,STATUS='DELETE')
0112       CLOSE(MSTP(162),ERR=400,STATUS='DELETE')
0113       RETURN
0114 
0115 C...Error exit.
0116   400 WRITE(*,*) ' PYLHEF file joining failed!'
0117 
0118       RETURN
0119       END