Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001  
0002 C*********************************************************************
0003  
0004 C...PYPILE
0005 C...Initializes multiplicity distribution and selects mutliplicity
0006 C...of pileup events, i.e. several events occuring at the same
0007 C...beam crossing.
0008  
0009       SUBROUTINE PYPILE(MPILE)
0010  
0011 C...Double precision and integer declarations.
0012       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0013       IMPLICIT INTEGER(I-N)
0014       INTEGER PYK,PYCHGE,PYCOMP
0015 C...Commonblocks.
0016       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0017       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0018       COMMON/PYINT1/MINT(400),VINT(400)
0019       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
0020       SAVE /PYDAT1/,/PYPARS/,/PYINT1/,/PYINT7/
0021 C...Local arrays and saved variables.
0022       DIMENSION WTI(0:200)
0023       SAVE IMIN,IMAX,WTI,WTS
0024  
0025 C...Sum of allowed cross-sections for pileup events.
0026       IF(MPILE.EQ.1) THEN
0027         VINT(131)=SIGT(0,0,5)
0028         IF(MSTP(132).GE.2) VINT(131)=VINT(131)+SIGT(0,0,4)
0029         IF(MSTP(132).GE.3) VINT(131)=VINT(131)+SIGT(0,0,2)+SIGT(0,0,3)
0030         IF(MSTP(132).GE.4) VINT(131)=VINT(131)+SIGT(0,0,1)
0031         IF(MSTP(133).LE.0) RETURN
0032  
0033 C...Initialize multiplicity distribution at maximum.
0034         XNAVE=VINT(131)*PARP(131)
0035         IF(XNAVE.GT.120D0) WRITE(MSTU(11),5000) XNAVE
0036         INAVE=MAX(1,MIN(200,NINT(XNAVE)))
0037         WTI(INAVE)=1D0
0038         WTS=WTI(INAVE)
0039         WTN=WTI(INAVE)*INAVE
0040  
0041 C...Find shape of multiplicity distribution below maximum.
0042         IMIN=INAVE
0043         DO 100 I=INAVE-1,1,-1
0044           IF(MSTP(133).EQ.1) WTI(I)=WTI(I+1)*(I+1)/XNAVE
0045           IF(MSTP(133).GE.2) WTI(I)=WTI(I+1)*I/XNAVE
0046           IF(WTI(I).LT.1D-6) GOTO 110
0047           WTS=WTS+WTI(I)
0048           WTN=WTN+WTI(I)*I
0049           IMIN=I
0050   100   CONTINUE
0051  
0052 C...Find shape of multiplicity distribution above maximum.
0053   110   IMAX=INAVE
0054         DO 120 I=INAVE+1,200
0055           IF(MSTP(133).EQ.1) WTI(I)=WTI(I-1)*XNAVE/I
0056           IF(MSTP(133).GE.2) WTI(I)=WTI(I-1)*XNAVE/(I-1)
0057           IF(WTI(I).LT.1D-6) GOTO 130
0058           WTS=WTS+WTI(I)
0059           WTN=WTN+WTI(I)*I
0060           IMAX=I
0061   120   CONTINUE
0062   130   VINT(132)=XNAVE
0063         VINT(133)=WTN/WTS
0064         IF(MSTP(133).EQ.1.AND.IMIN.EQ.1) VINT(134)=
0065      &  WTS/(WTS+WTI(1)/XNAVE)
0066         IF(MSTP(133).EQ.1.AND.IMIN.GT.1) VINT(134)=1D0
0067         IF(MSTP(133).GE.2) VINT(134)=XNAVE
0068  
0069 C...Pick multiplicity of pileup events.
0070       ELSE
0071         IF(MSTP(133).LE.0) THEN
0072           MINT(81)=MAX(1,MSTP(134))
0073         ELSE
0074           WTR=WTS*PYR(0)
0075           DO 140 I=IMIN,IMAX
0076             MINT(81)=I
0077             WTR=WTR-WTI(I)
0078             IF(WTR.LE.0D0) GOTO 150
0079   140     CONTINUE
0080   150     CONTINUE
0081         ENDIF
0082       ENDIF
0083  
0084 C...Format statement for error message.
0085  5000 FORMAT(1X,'Warning: requested average number of events per bunch',
0086      &'crossing too large, ',1P,D12.4)
0087  
0088       RETURN
0089       END