File indexing completed on 2025-08-05 08:21:13
0001
0002
0003
0004
0005
0006
0007 SUBROUTINE PYONOF(CHIN)
0008
0009
0010 IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0011 IMPLICIT INTEGER(I-N)
0012 INTEGER PYK,PYCHGE,PYCOMP
0013
0014 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0015 COMMON/PYDAT3/MDCY(500,3),MDME(8000,2),BRAT(8000),KFDP(8000,5)
0016 SAVE /PYDAT1/,/PYDAT3/
0017
0018 INTEGER KFCMP(10),KFTMP(10)
0019 CHARACTER CHIN*(*),CHTMP*104,CHFIX*104,CHMODE*10,CHCODE*8,
0020 &CHALP(2)*26
0021 DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
0022 &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
0023
0024
0025 CHTMP=CHIN//' '
0026 LBEG=0
0027 100 LBEG=LBEG+1
0028 IF(CHTMP(LBEG:LBEG).EQ.' ') GOTO 100
0029 LEND=LBEG-1
0030 105 LEND=LEND+1
0031 IF(LEND.LE.100.AND.CHTMP(LEND:LEND).NE.'!') GOTO 105
0032 110 LEND=LEND-1
0033 IF(CHTMP(LEND:LEND).EQ.' ') GOTO 110
0034 LEN=1+LEND-LBEG
0035 CHFIX(1:LEN)=CHTMP(LBEG:LEND)
0036
0037
0038 LCOLON=0
0039 120 LCOLON=LCOLON+1
0040 IF(CHFIX(LCOLON:LCOLON).NE.':') GOTO 120
0041 CHCODE=' '
0042 CHCODE(10-LCOLON:8)=CHFIX(1:LCOLON-1)
0043 READ(CHCODE,'(I8)',ERR=300) KF
0044 KC=PYCOMP(KF)
0045
0046
0047 IF(KC.EQ.0) THEN
0048 CALL PYERRM(18,'(PYONOF:) unrecognized particle '//CHCODE)
0049 RETURN
0050 ENDIF
0051 IDCBEG=MDCY(KC,2)
0052 IDCLEN=MDCY(KC,3)
0053 IF(IDCBEG.EQ.0.OR.IDCLEN.EQ.0) THEN
0054 CALL PYERRM(18,'(PYONOF:) no decay channels for '//CHCODE)
0055 RETURN
0056 ENDIF
0057
0058
0059 LSEP=LCOLON
0060 130 LSEP=LSEP+1
0061 IF(LSEP.LE.LEN.AND.CHFIX(LSEP:LSEP).NE.' '.AND.
0062 &CHFIX(LSEP:LSEP).NE.'=') GOTO 130
0063 CHMODE=' '
0064 LMODE=LSEP-LCOLON-1
0065 CHMODE(1:LMODE)=CHFIX(LCOLON+1:LSEP-1)
0066
0067
0068 DO 150 LCOM=1,LMODE
0069 DO 140 LALP=1,26
0070 IF(CHMODE(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP))
0071 & CHMODE(LCOM:LCOM)=CHALP(2)(LALP:LALP)
0072 140 CONTINUE
0073 150 CONTINUE
0074
0075
0076 MODE=0
0077 IF(CHMODE.EQ.'ALLOFF') MODE=1
0078 IF(CHMODE.EQ.'ALLON') MODE=2
0079 IF(CHMODE.EQ.'OFFIFANY') MODE=3
0080 IF(CHMODE.EQ.'ONIFANY') MODE=4
0081 IF(CHMODE.EQ.'OFFIFALL') MODE=5
0082 IF(CHMODE.EQ.'ONIFALL') MODE=6
0083 IF(CHMODE.EQ.'OFFIFMATCH') MODE=7
0084 IF(CHMODE.EQ.'ONIFMATCH') MODE=8
0085 IF(MODE.EQ.0) THEN
0086 CALL PYERRM(18,'(PYONOF:) unknown command '//CHMODE)
0087 RETURN
0088 ENDIF
0089
0090
0091 IF(MODE.EQ.1.OR.MODE.EQ.2) THEN
0092 WRITE(MSTU(11),1000) KF,CHMODE
0093 DO 160 IDC=IDCBEG,IDCBEG+IDCLEN-1
0094 IF(MDME(IDC,1).LT.0) GOTO 160
0095 MDME(IDC,1)=MODE-1
0096 160 CONTINUE
0097 RETURN
0098 ENDIF
0099
0100
0101 NCMP=0
0102 LBEG=LSEP
0103 170 LBEG=LBEG+1
0104 IF(LBEG.GT.LEN) GOTO 190
0105 IF(LBEG.LT.LEN.AND.(CHFIX(LBEG:LBEG).EQ.' '.OR.
0106 &CHFIX(LBEG:LBEG).EQ.'='.OR.CHFIX(LBEG:LBEG).EQ.',')) GOTO 170
0107 LEND=LBEG-1
0108 180 LEND=LEND+1
0109 IF(LEND.LT.LEN.AND.CHFIX(LEND:LEND).NE.' '.AND.
0110 &CHFIX(LEND:LEND).NE.'='.AND.CHFIX(LEND:LEND).NE.',') GOTO 180
0111 IF(LEND.LT.LEN) LEND=LEND-1
0112 CHCODE=' '
0113 CHCODE(8-LEND+LBEG:8)=CHFIX(LBEG:LEND)
0114 READ(CHCODE,'(I8)',ERR=300) KFREAD
0115 NCMP=NCMP+1
0116 KFCMP(NCMP)=IABS(KFREAD)
0117 LBEG=LEND
0118 IF(NCMP.LT.10) GOTO 170
0119 190 CONTINUE
0120 WRITE(MSTU(11),1100) KF,CHMODE,(KFCMP(ICMP),ICMP=1,NCMP)
0121
0122
0123 IF(MODE.EQ.3.OR.MODE.EQ.4) THEN
0124 DO 220 IDC=IDCBEG,IDCBEG+IDCLEN-1
0125 IF(MDME(IDC,1).LT.0) GOTO 220
0126 DO 210 IKF=1,5
0127 KFNOW=IABS(KFDP(IDC,IKF))
0128 IF(KFNOW.EQ.0) GOTO 210
0129 DO 200 ICMP=1,NCMP
0130 IF(KFCMP(ICMP).EQ.KFNOW) THEN
0131 MDME(IDC,1)=MODE-3
0132 GOTO 220
0133 ENDIF
0134 200 CONTINUE
0135 210 CONTINUE
0136 220 CONTINUE
0137 RETURN
0138 ENDIF
0139
0140
0141 DO 260 IDC=IDCBEG,IDCBEG+IDCLEN-1
0142 IF(MDME(IDC,1).LT.0) GOTO 260
0143 NTMP=NCMP
0144 DO 230 ITMP=1,NTMP
0145 KFTMP(ITMP)=KFCMP(ITMP)
0146 230 CONTINUE
0147 NFIN=0
0148 DO 250 IKF=1,5
0149 KFNOW=IABS(KFDP(IDC,IKF))
0150 IF(KFNOW.EQ.0) GOTO 250
0151 NFIN=NFIN+1
0152 DO 240 ITMP=1,NTMP
0153 IF(KFTMP(ITMP).EQ.KFNOW) THEN
0154 KFTMP(ITMP)=KFTMP(NTMP)
0155 NTMP=NTMP-1
0156 GOTO 250
0157 ENDIF
0158 240 CONTINUE
0159 250 CONTINUE
0160 IF(NTMP.EQ.0.AND.MODE.LE.6) MDME(IDC,1)=MODE-5
0161 IF(NTMP.EQ.0.AND.NFIN.EQ.NCMP.AND.MODE.GE.7)
0162 & MDME(IDC,1)=MODE-7
0163 260 CONTINUE
0164 RETURN
0165
0166
0167 300 CALL PYERRM(18,'(PYONOF:) could not interpret particle code '
0168 &//CHCODE)
0169
0170
0171 1000 FORMAT(' Decays for',I8,' set ',A10)
0172 1100 FORMAT(' Decays for',I8,' set ',A10,' if match',10I8)
0173
0174 RETURN
0175 END