Photos_make.f

00001 C.             2) GENERAL INTERFACE:
00002 C.                                      PHOTOS_GET
00003 C.                                      PHOTOS_MAKE
00004 
00005 
00006 C.   COMMONS:
00007 C.   NAME     USED IN SECT. # OF OCC.     Comment
00008 C.   PHOQED   1) 2)            3      Flags whether emisson to be gen. 
00009 C.   PHOLUN   1) 4)            6      Output device number
00010 C.   PHOCOP   1) 3)            4      photon coupling & min energy
00011 C.   PHPICO   1) 3) 4)         5      PI & 2*PI
00012 C.   PHSEED   1) 4)            3      RN seed 
00013 C.   PHOSTA   1) 4)            3      Status information
00014 C.   PHOKEY   1) 2) 3)         7      Keys for nonstandard application
00015 C.   PHOVER   1)               1      Version info for outside
00016 C.   HEPEVT   2)               2      PDG common
00017 C.   PH_HEPEVT2)               8      PDG common internal
00018 C.   PHOEVT   2) 3)           10      PDG branch
00019 C.   PHOIF    2) 3)            2      emission flags for PDG branch 
00020 C.   PHOMOM   3)               5      param of char-neutr system
00021 C.   PHOPHS   3)               5      photon momentum parameters
00022 C.   PHOPRO   3)               4      var. for photon rep. (in branch)
00023 C.   PHOCMS   2)               3      parameters of boost to branch CMS
00024 C.   PHNUM    4)               1      event number from outside         
00025 C.----------------------------------------------------------------------
00026 
00027       SUBROUTINE PHLUPAB(IPOINT)
00028       IMPLICIT NONE
00029 C.----------------------------------------------------------------------
00030 C.
00031 C.    PHLUPA:   debugging tool
00032 C.
00033 C.    Purpose:  NONE, eventually may printout content of the 
00034 C.              /PHOEVT/ common
00035 C.
00036 C.    Input Parameters:   Common /PHOEVT/ and /PHNUM/ 
00037 C.                        latter may have number of the event. 
00038 C.
00039 C.    Output Parameters:  None
00040 C.
00041 C.    Author(s):  Z. Was                          Created at:  30/05/93
00042 C.                                                Last Update: 09/10/05
00043 C.
00044 C.----------------------------------------------------------------------
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  ! maximal no-print point
00062         IPOIN =IPOIN0
00063         IPOINM=400 001  ! minimal no-print point
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 C.----------------------------------------------------------------------
00126 C.
00127 C.    PHOTOS_MAKE:   General search routine
00128 C.
00129 C.    Purpose:  Search through the /PH_HEPEVT/ standard HEP common, sta-
00130 C.              rting from  the IPPAR-th  particle.  Whenevr  branching 
00131 C.              point is found routine PHTYPE(IP) is called.
00132 C.              Finally if calls on PHTYPE(IP) modified entries, common
00133 C               /PH_HEPEVT/ is ordered.
00134 C.
00135 C.    Input Parameter:    IPPAR:  Pointer   to   decaying  particle  in
00136 C.                                /PH_HEPEVT/ and the common itself,
00137 C.
00138 C.    Output Parameters:  Common  /PH_HEPEVT/, either with or without 
00139 C.                                new particles added.
00140 C.
00141 C.    Author(s):  Z. Was, B. van Eijk             Created at:  26/11/89
00142 C.                                                Last Update: 30/08/93
00143 C.
00144 C.----------------------------------------------------------------------
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 C--
00165       CALL PHLUPAB(3)
00166 C      NEVHEP=EVENT
00167 
00168 C      write(*,*) 'at poczatek'
00169 C      CALL PHODMP
00170       IPPAR=ABS(IPARR)
00171 C--   Store pointers for cascade treatement...
00172       IP=IPPAR
00173       NLAST=NHEP
00174       CASCAD=.FALSE.
00175 
00176 C--
00177 C--   Check decay multiplicity and minimum of correctness..
00178       IF ((JDAHEP(1,IP).EQ.0).OR.(JMOHEP(1,JDAHEP(1,IP)).NE.IP)) RETURN
00179       CALL PHOtoRF
00180 
00181 C      write(*,*) 'at przygotowany'
00182 C      CALL PHODMP
00183 C--
00184 C-- single branch mode 
00185 C-- we start looking for the decay points in the cascade 
00186 C-- IPPAR is original position where the program was called
00187       ISTACK(0)=IPPAR
00188 C--   NUMIT denotes number of secondary decay branches
00189       NUMIT=0
00190 C--   NTRY denotes number of secondary branches already checked for 
00191 C--        for existence of further branches 
00192       NTRY=0
00193 C-- let-s search if IPARR does not prevent searching. 
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 C-- let-s do generation
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 C--   
00224         CALL PHTYPE(ISTACK(KK))
00225 
00226 C--
00227 C--  Correct energy/momentum of cascade daughters
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 C--
00239 C--   rearrange  /PH_HEPEVT/  to get correct order..
00240         IF (NHEP.GT.NLAST) THEN
00241           DO 160 I=NLAST+1,NHEP
00242 C--
00243 C--   Photon mother and position...
00244             MOTHER=JMOHEP(1,I)
00245             POSPHO=JDAHEP(2,MOTHER)+1
00246 C--   Intermediate save of photon energy/momentum and pointers
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 C--
00255 C--   Exclude photon in sequence !
00256             IF (POSPHO.NE.NHEP) THEN
00257 C--
00258 C--
00259 C--   Order /PH_HEPEVT/
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 C--
00272 C--   Correct pointers assuming most dirty /PH_HEPEVT/...
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 C--
00281 C--   Store photon energy/momentum
00282               DO 140 J=1,5
00283   140         PHEP(J,POSPHO)=PHOTON(J)
00284             ENDIF
00285 C--
00286 C--   Store pointers for the photon...
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 C--
00295 C--   Get photon production vertex position
00296             DO 150 J=1,4
00297   150       VHEP(J,POSPHO)=VHEP(J,POSPHO-1)
00298   160     CONTINUE
00299         ENDIF
00300 C      write(*,*) 'at po dzialaniu '
00301 C      CALL PHODMP
00302 
00303       CALL PHOtoLAB
00304 C      write(*,*) 'at koniec'
00305 C      CALL PHODMP
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 * Boost along arbitrary axis (as implemented by Ronald Kleiss).
00392 * The method is described in book of Bjorken and Drell
00393 * p boosted into r  from actual frame to rest frame of q
00394 * forth (mode = 1) or back (mode = -1).
00395 * q must be a timelike, p may be arbitrary.
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 
Generated on Sun Oct 20 20:23:56 2013 for C++InterfacetoPHOTOS by  doxygen 1.6.3