2 C***********************************************************************
4 SUBROUTINE PYTEST(MTEST)
6 C...Purpose: to provide a simple program (disguised as a subroutine) to
7 C...run at installation as a check that the program works as intended.
8 COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
9 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
11 COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
12 COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
13 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/,/LUDAT3/
15 SAVE /PYSUBS/,/PYPARS/
17 C...Common initial values. Loop over initiating conditions.
18 MSTP(122)=MAX(0,MIN(2,MTEST))
23 C...Reset process type, kinematics cuts, and the flags used.
40 C...Prompt photon production at fixed target.
43 PESUM=SQRT(PZSUM**2+ULMASS(211)**2)+ULMASS(2212)
47 CALL PYINIT('FIXT','pi+','p',PZSUM)
49 C...QCD processes at ISR energies.
50 ELSEIF(IPROC.EQ.2) THEN
56 CALL PYINIT('CMS','p','p',PESUM)
58 C...W production + multiple interactions at CERN Collider.
59 ELSEIF(IPROC.EQ.3) THEN
68 CALL PYINIT('CMS','p','pbar',PESUM)
70 C...W/Z gauge boson pairs + pileup events at the Tevatron.
71 ELSEIF(IPROC.EQ.4) THEN
83 CALL PYINIT('CMS','p','pbar',PESUM)
85 C...Higgs production at LHC.
86 ELSEIF(IPROC.EQ.5) THEN
98 CALL PYINIT('CMS','p','p',PESUM)
100 C...Z' production at SSC.
101 ELSEIF(IPROC.EQ.6) THEN
110 CALL PYINIT('CMS','p','p',PESUM)
112 C...W pair production at 1 TeV e+e- collider.
113 ELSEIF(IPROC.EQ.7) THEN
120 CALL PYINIT('CMS','e+','e-',PESUM)
122 C...Deep inelastic scattering at a LEP+LHC ep collider.
123 ELSEIF(IPROC.EQ.8) THEN
136 CALL PYINIT('USER','p','e-',PESUM)
139 C...Generate 20 events of each required type.
143 IF(IPROC.EQ.4) PESUMM=MSTI(41)*PESUM
145 C...Check conservation of energy/momentum/flavour.
147 DEVE=ABS(PLU(0,4)-PESUMM)+ABS(PLU(0,3)-PZSUM)
148 DEVT=ABS(PLU(0,1))+ABS(PLU(0,2))
149 DEVQ=ABS(PLU(0,6)-PQSUM)
150 IF(DEVE.GT.2E-3*PESUM.OR.DEVT.GT.MAX(0.01,1E-4*PESUM).OR.
152 IF(MERR.NE.0) WRITE(MSTU(11),5000) IPROC,IEV
154 C...Check that all KF codes are known ones, and that partons/particles
155 C...satisfy energy-momentum-mass relation.
157 IF(K(I,1).GT.20) GOTO 110
158 IF(LUCOMP(K(I,2)).EQ.0) THEN
159 WRITE(MSTU(11),5100) I
162 PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2*
164 IF(ABS(PD).GT.MAX(0.1,0.002*P(I,4)**2,0.002*P(I,5)**2).OR.
165 &(P(I,5).GE.0..AND.P(I,4).LT.0.)) THEN
166 WRITE(MSTU(11),5200) I
171 C...Listing of erroneous events, and first event of each type.
172 IF(MERR.GE.1) NERR=NERR+1
178 IF(MTEST.GE.1.AND.(MERR.GE.1.OR.IEV.EQ.1)) THEN
179 IF(MERR.GE.1) WRITE(MSTU(11),5400)
184 C...List statistics for each process type.
185 IF(MTEST.GE.1) CALL PYSTAT(1)
188 C...Summarize result of run.
189 IF(NERR.EQ.0) WRITE(MSTU(11),5500)
190 IF(NERR.GT.0) WRITE(MSTU(11),5600) NERR
193 C...Formats for information.
194 5000 FORMAT(/5X,'Energy/momentum/flavour nonconservation for process',
196 5100 FORMAT(/5X,'Entry no.',I4,' in following event not known code')
197 5200 FORMAT(/5X,'Entry no.',I4,' in following event has faulty ',
199 5300 FORMAT(/5X,'This is the tenth error experienced! Something is ',
200 &'wrong.'/5X,'Execution will be stopped after listing of event.')
201 5400 FORMAT(5X,'Faulty event follows:')
202 5500 FORMAT(//5X,'End result of PYTEST: no errors detected.')
203 5600 FORMAT(//5X,'End result of PYTEST:',I2,' errors detected.'/
204 &5X,'This should not have happened!')