00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 SUBROUTINE PHLUPAB(IPOINT)
00028 IMPLICIT NONE
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 INTEGER NMXPHO
00046 PARAMETER (NMXPHO=10000)
00047 INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO,I,J,IPOINT
00048 INTEGER IPOIN,IPOIN0,IPOINM,IEV
00049 INTEGER IOUT
00050 REAL*8 PPHO,VPHO,SUM
00051 COMMON/PH_HEPEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
00052 &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
00053 COMMON /PHNUM/ IEV
00054 INTEGER PHLUN
00055 COMMON/PHOLUN/PHLUN
00056 DIMENSION SUM(5)
00057 DATA IPOIN0/ -5/
00058 COMMON /PHLUPY/ IPOIN,IPOINM
00059 SAVE IPOIN0
00060 IF (IPOIN0.LT.0) THEN
00061 IPOIN0=400 000
00062 IPOIN =IPOIN0
00063 IPOINM=400 001
00064 ENDIF
00065 IF (IPOINT.LE.IPOINM.OR.IPOINT.GE.IPOIN ) RETURN
00066 IOUT=56
00067 IF (IEV.LT.1000) THEN
00068 DO I=1,5
00069 SUM(I)=0.0D0
00070 ENDDO
00071 WRITE(PHLUN,*) 'EVENT NR=',IEV,
00072 $ 'WE ARE TESTING /PH_HEPEVT/ at IPOINT=',IPOINT
00073 WRITE(PHLUN,10)
00074 I=1
00075 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
00076 $ PPHO(4,I),PPHO(5,I),JDAPHO(1,I),JDAPHO(2,I)
00077 I=2
00078 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
00079 $ PPHO(4,I),PPHO(5,I),JDAPHO(1,I),JDAPHO(2,I)
00080 WRITE(PHLUN,*) ' '
00081 DO I=3,NPHO
00082 WRITE(PHLUN,20) IDPHO(I),PPHO(1,I),PPHO(2,I),PPHO(3,I),
00083 $ PPHO(4,I),PPHO(5,I),JMOPHO(1,I),JMOPHO(2,I)
00084 DO J=1,4
00085 SUM(J)=SUM(J)+PPHO(J,I)
00086 ENDDO
00087 ENDDO
00088 SUM(5)=SQRT(ABS(SUM(4)**2-SUM(1)**2-SUM(2)**2-SUM(3)**2))
00089 WRITE(PHLUN,30) SUM
00090 10 FORMAT(1X,' ID ','p_x ','p_y ','p_z ',
00091 $ 'E ','m ',
00092 $ 'ID-MO_DA1','ID-MO DA2' )
00093 20 FORMAT(1X,I4,5(F14.9),2I9)
00094 30 FORMAT(1X,' SUM',5(F14.9))
00095 ENDIF
00096 END
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 SUBROUTINE PHOTOS_MAKE_C(IPARR)
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 IMPLICIT NONE
00146 REAL*8 PHOTON(5)
00147 INTEGER IP,IPARR,IPPAR,I,J,K,L,NLAST
00148 DOUBLE PRECISION DATA
00149 INTEGER MOTHER,POSPHO
00150 LOGICAL CASCAD
00151 INTEGER NMXHEP
00152 PARAMETER (NMXHEP=10000)
00153 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00154 REAL*8 PHEP,VHEP
00155 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00156 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00157 LOGICAL QEDRAD
00158 COMMON/PH_PHOQED/QEDRAD(NMXHEP)
00159 INTEGER NMXPHO
00160 PARAMETER (NMXPHO=10000)
00161 INTEGER ISTACK(0:NMXPHO),NUMIT,NTRY,KK,LL,II,NA,FIRST,LAST
00162 INTEGER FIRSTA,LASTA,IPP,IDA1,IDA2,MOTHER2,IDPHO,ISPHO
00163 REAL*8 PORIG(5,NMXPHO)
00164
00165 CALL PHLUPAB(3)
00166
00167
00168
00169
00170 IPPAR=ABS(IPARR)
00171
00172 IP=IPPAR
00173 NLAST=NHEP
00174 CASCAD=.FALSE.
00175
00176
00177
00178 IF ((JDAHEP(1,IP).EQ.0).OR.(JMOHEP(1,JDAHEP(1,IP)).NE.IP)) RETURN
00179 CALL PHOtoRF
00180
00181
00182
00183
00184
00185
00186
00187 ISTACK(0)=IPPAR
00188
00189 NUMIT=0
00190
00191
00192 NTRY=0
00193
00194 IF (IPARR.GT.0) THEN
00195 30 CONTINUE
00196 DO I=JDAHEP(1,IP),JDAHEP(2,IP)
00197 IF (JDAHEP(1,I).NE.0.AND.JMOHEP(1,JDAHEP(1,I)).EQ.I) THEN
00198 NUMIT=NUMIT+1
00199 IF (NUMIT.GT.NMXPHO) THEN
00200 DATA=NUMIT
00201 CALL PHOERR(7,'PHOTOS',DATA)
00202 ENDIF
00203 ISTACK(NUMIT)=I
00204 ENDIF
00205 ENDDO
00206 IF(NUMIT.GT.NTRY) THEN
00207 NTRY=NTRY+1
00208 IP=ISTACK(NTRY)
00209 GOTO 30
00210 ENDIF
00211 ENDIF
00212
00213
00214 DO 25 KK=0,NUMIT
00215 NA=NHEP
00216 FIRST=JDAHEP(1,ISTACK(KK))
00217 LAST=JDAHEP(2,ISTACK(KK))
00218 DO II=1,LAST-FIRST+1
00219 DO LL=1,5
00220 PORIG(LL,II)=PHEP(LL,FIRST+II-1)
00221 ENDDO
00222 ENDDO
00223
00224 CALL PHTYPE(ISTACK(KK))
00225
00226
00227
00228 IF(NHEP.GT.NA) THEN
00229 DO II=1,LAST-FIRST+1
00230 IPP=FIRST+II-1
00231 FIRSTA=JDAHEP(1,IPP)
00232 LASTA=JDAHEP(2,IPP)
00233 IF(JMOHEP(1,IPP).EQ.ISTACK(KK))
00234 $ CALL PHOBOS(IPP,PORIG(1,II),PHEP(1,IPP),FIRSTA,LASTA)
00235 ENDDO
00236 ENDIF
00237 25 CONTINUE
00238
00239
00240 IF (NHEP.GT.NLAST) THEN
00241 DO 160 I=NLAST+1,NHEP
00242
00243
00244 MOTHER=JMOHEP(1,I)
00245 POSPHO=JDAHEP(2,MOTHER)+1
00246
00247 DO 90 J=1,5
00248 90 PHOTON(J)=PHEP(J,I)
00249 ISPHO =ISTHEP(I)
00250 IDPHO =IDHEP(I)
00251 MOTHER2 =JMOHEP(2,I)
00252 IDA1 =JDAHEP(1,I)
00253 IDA2 =JDAHEP(2,I)
00254
00255
00256 IF (POSPHO.NE.NHEP) THEN
00257
00258
00259
00260 DO 120 K=I,POSPHO+1,-1
00261 ISTHEP(K)=ISTHEP(K-1)
00262 QEDRAD(K)=QEDRAD(K-1)
00263 IDHEP(K)=IDHEP(K-1)
00264 DO 100 L=1,2
00265 JMOHEP(L,K)=JMOHEP(L,K-1)
00266 100 JDAHEP(L,K)=JDAHEP(L,K-1)
00267 DO 110 L=1,5
00268 110 PHEP(L,K)=PHEP(L,K-1)
00269 DO 120 L=1,4
00270 120 VHEP(L,K)=VHEP(L,K-1)
00271
00272
00273 DO 130 K=1,NHEP
00274 DO 130 L=1,2
00275 IF ((JMOHEP(L,K).NE.0).AND.(JMOHEP(L,K).GE.
00276 & POSPHO)) JMOHEP(L,K)=JMOHEP(L,K)+1
00277 IF ((JDAHEP(L,K).NE.0).AND.(JDAHEP(L,K).GE.
00278 & POSPHO)) JDAHEP(L,K)=JDAHEP(L,K)+1
00279 130 CONTINUE
00280
00281
00282 DO 140 J=1,5
00283 140 PHEP(J,POSPHO)=PHOTON(J)
00284 ENDIF
00285
00286
00287 JDAHEP(2,MOTHER)=POSPHO
00288 ISTHEP(POSPHO)=ISPHO
00289 IDHEP(POSPHO)=IDPHO
00290 JMOHEP(1,POSPHO)=MOTHER
00291 JMOHEP(2,POSPHO)=MOTHER2
00292 JDAHEP(1,POSPHO)=IDA1
00293 JDAHEP(2,POSPHO)=IDA2
00294
00295
00296 DO 150 J=1,4
00297 150 VHEP(J,POSPHO)=VHEP(J,POSPHO-1)
00298 160 CONTINUE
00299 ENDIF
00300
00301
00302
00303 CALL PHOtoLAB
00304
00305
00306 RETURN
00307 END
00308 subroutine PHOtoRF
00309 IMPLICIT NONE
00310 INTEGER NMXHEP
00311 PARAMETER (NMXHEP=10000)
00312 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00313 REAL*8 PHEP,VHEP
00314 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00315 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00316 LOGICAL QEDRAD
00317 COMMON/PH_PHOQED/QEDRAD(NMXHEP)
00318 REAL*8 QQ(4),XM,th1,fi1
00319 COMMON /PH_TOFROM/ QQ,XM,th1,fi1
00320 REAL*8 PP(4),RR(4)
00321 DOUBLE PRECISION PHOAN1,PHOAN2
00322 INTEGER K,L
00323 DO K=1,4
00324 QQ(k)=0
00325 ENDDO
00326 DO L=JDAHEP(1,JMOHEP(1,NHEP)),JDAHEP(2,JMOHEP(1,NHEP))
00327 DO K=1,4
00328 QQ(k)=QQ(K)+PHEP(K,L)
00329 ENDDO
00330 ENDDO
00331 XM =QQ(4)**2-QQ(3)**2-QQ(2)**2-QQ(1)**2
00332 IF (XM.GT.0D0) XM=SQRT(XM)
00333 IF (XM.LE.0) RETURN
00334 DO L=1,NHEP
00335 DO K=1,4
00336 PP(K)=phep(K,L)
00337 ENDDO
00338 call bostdq(1,qq,pp,rr)
00339 DO K=1,4
00340 phep(K,L)=RR(K)
00341 ENDDO
00342 ENDDO
00343 FI1=0.D0
00344 TH1=0.d0
00345 IF(ABS(PHEP(1,1))+ABS(PHEP(2,1)).GT.0D0)
00346 $ FI1=PHOAN1(PHEP(1,1),PHEP(2,1))
00347 IF(ABS(PHEP(1,1))+ABS(PHEP(2,1))+ABS(PHEP(3,1)).GT.0D0)
00348 $ TH1=PHOAN2(PHEP(3,1),SQRT(PHEP(1,1)**2+PHEP(2,1)**2))
00349 DO L=1,NHEP
00350 CALL PHORO3(-FI1,PHEP(1,L))
00351 CALL PHORO2(-TH1,PHEP(1,L))
00352 ENDDO
00353 return
00354 end
00355 subroutine PHOtoLAB
00356 IMPLICIT NONE
00357 INTEGER NMXHEP
00358 PARAMETER (NMXHEP=10000)
00359 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
00360 REAL*8 PHEP,VHEP
00361 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
00362 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
00363 LOGICAL QEDRAD
00364 COMMON/PH_PHOQED/QEDRAD(NMXHEP)
00365 REAL*8 QQ(4),XM,th1,fi1
00366 COMMON /PH_TOFROM/ QQ,XM,th1,fi1
00367 REAL*8 PP(4),RR(4)
00368 INTEGER K,L
00369
00370 IF (XM.LE.0) RETURN
00371
00372 DO L=1,NHEP
00373 CALL PHORO2( TH1,PHEP(1,L))
00374 CALL PHORO3( FI1,PHEP(1,L))
00375 ENDDO
00376
00377 DO L=1,NHEP
00378 DO K=1,4
00379 PP(K)=phep(K,L)
00380 ENDDO
00381 call bostdq(-1,qq,pp,rr)
00382 DO K=1,4
00383 phep(K,L)=RR(K)
00384 ENDDO
00385 ENDDO
00386 return
00387 end
00388
00389 SUBROUTINE bostdq(mode,qq,pp,r)
00390
00391
00392
00393
00394
00395
00396 IMPLICIT DOUBLE PRECISION (a-h,o-z)
00397 DIMENSION qq(4),pp(4),r(4)
00398 DIMENSION q(4),p(4)
00399 DO k=1,4
00400 p(k)=pp(k)
00401 q(k)=qq(k)
00402 ENDDO
00403 amq =dsqrt(q(4)**2-q(1)**2-q(2)**2-q(3)**2)
00404 IF (mode .EQ. -1) THEN
00405 r(4) = (p(1)*q(1)+p(2)*q(2)+p(3)*q(3)+p(4)*q(4))/amq
00406 fac = (r(4)+p(4))/(q(4)+amq)
00407 ELSEIF(mode .EQ. 1) THEN
00408 r(4) =(-p(1)*q(1)-p(2)*q(2)-p(3)*q(3)+p(4)*q(4))/amq
00409 fac =-(r(4)+p(4))/(q(4)+amq)
00410 ELSE
00411 WRITE(*,*) ' ++++++++ wrong mode in boostdq '
00412 STOP
00413 ENDIF
00414 r(1)=p(1)+fac*q(1)
00415 r(2)=p(2)+fac*q(2)
00416 r(3)=p(3)+fac*q(3)
00417 END
00418