File: hepevt_wrapper_example_fortran.f

package info (click to toggle)
hepmc3 3.1.2-2.1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 14,124 kB
  • sloc: fortran: 66,849; cpp: 13,604; ansic: 1,374; xml: 109; sh: 72; makefile: 33
file content (151 lines) | stat: -rw-r--r-- 6,019 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
      SUBROUTINE SIMPLE_TAU_HEPEVT_EVENT
      IMPLICIT NONE

C     CREATE SIMPLE EVENT: e+ e- -> Z -> tau+ tau- -> pi nu_tau,  pi nu_tau
C     ---------------------------------------------------------------------
      CALL ADD_PARTICLE(  11, 6,  1.7763568394002505D-15,
     $     -3.5565894425761324D-15,  4.5521681043409913D+01,
     $     4.5521681043409934D+01,
     $                    0.0005111D0,             0,  0,  3,  3)
      CALL ADD_PARTICLE( -11, 6, -1.7763568394002505D-15,
     $     3.5488352204797800D-15, -4.5584999071936601D+01,
     $     4.5584999071936622D+01,
     $                    0.0005111D0,             0,  0,  3,  3)
      CALL ADD_PARTICLE(  23, 5,  0D0,                     0D0,
     $     -6.3318028526687442D-02, 9.1106680115346506D+01,
     $                    9.1106658112716090D+01,  1,  2,  4,  5)
     $     
      CALL ADD_PARTICLE(  15, 2, -2.3191595992562256D+01,
     $     -2.6310500920665142D+01, -2.9046412466624929D+01,
     $     4.5573504956498098D+01,
     $                    1.7769900000002097D+00,  3,  0,  6,  7)
      CALL ADD_PARTICLE( -15, 2,  2.3191595992562256D+01,
     $     2.6310500920665142D+01,  2.8983094438098242D+01,
     $     4.5533175158848429D+01,
     $                    1.7769900000000818D+00,  3,  0,  8,  9)
      CALL ADD_PARTICLE(  16, 1, -1.2566536214715378D+00,
     $     -1.7970251138317268D+00, -1.3801323581022720D+00,
     $     2.5910119010468553D+00,
     $                    9.9872238934040070D-03,  4,  0,  0, 0)
      CALL ADD_PARTICLE(-211, 1, -2.1935073012334062D+01,
     $     -2.4513624017269400D+01, -2.7666443730700312D+01,
     $     4.2982749776866747D+01,
     $                    1.3956783711910248D-01,  4,  0,  0, 0)
      CALL ADD_PARTICLE( -16, 1,  8.4364531743909055D+00,
     $     8.3202830831667836D+00,  9.6202800273055971D+00,
     $     1.5262723881157640D+01,
     $                    9.9829332903027534D-03,  5,  0,  0, 0)
      CALL ADD_PARTICLE( 211, 1,  1.4755273459419701D+01,
     $     1.7990366047940022D+01,  1.9362977676297948D+01,
     $     3.0270707771933196D+01,
     $                    1.3956753909587860D-01,  5,  0,  0, 0)
      END

      SUBROUTINE ADD_PARTICLE(ID,STATUS,PX,PY,PZ,E,M,MOTHER1,MOTHER2,
     $     DAUGHTER1,DAUGHTER2)
      IMPLICIT NONE
      INTEGER ID,STATUS,MOTHER1,MOTHER2,DAUGHTER1,DAUGHTER2
      DOUBLE PRECISION  PX,PY,PZ,E,M
C-----------------------------------------------------------------------------
C COMMON HEPEVT
C
C IMPORTANT: The definition of HEPEVT is also present in:
C            include/HepMC/HEPEVT_wrapper.h
C            If the definition changes (eg. different value of NMXHEP or REAL
C            instead of REAL*8) it has to be updated in that file as well.
C-----------------------------------------------------------------------------
      INTEGER NMXHEP
      PARAMETER (NMXHEP=10000)
      DOUBLE PRECISION  phep,  vhep     ! to be real*4/ *8  depending on host
      INTEGER nevhep,nhep,isthep,idhep,jmohep,
     $        jdahep
      COMMON /hepevt/
     $      nevhep,           ! serial number
     $      nhep,             ! number of particles
     $      isthep(nmxhep),   ! status code
     $      idhep(nmxhep),    ! particle ident KF
     $      jmohep(2,nmxhep), ! parent particles
     $      jdahep(2,nmxhep), ! childreen particles
     $      phep(5,nmxhep),   ! four-momentum, mass [GeV]
     $      vhep(4,nmxhep)    ! vertex [mm]
      NHEP=NHEP+1
      IDHEP(NHEP) =ID
      ISTHEP(NHEP)=STATUS
      PHEP(1,NHEP)=PX
      PHEP(2,NHEP)=PY
      PHEP(3,NHEP)=PZ
      PHEP(4,NHEP)=E
      PHEP(5,NHEP)=M
      JMOHEP(1,NHEP)=MOTHER1
      JMOHEP(2,NHEP)=MOTHER2
      JDAHEP(1,NHEP)=DAUGHTER1
      JDAHEP(2,NHEP)=DAUGHTER2
      END

      SUBROUTINE PHODMP
      IMPLICIT NONE
      DOUBLE PRECISION  SUMVEC(5)
      INTEGER I,J
      INTEGER NMXHEP
      PARAMETER (NMXHEP=10000)
      DOUBLE PRECISION  phep,  vhep     ! to be real*4/ *8  depending on host
      INTEGER nevhep,nhep,isthep,idhep,jmohep,
     $        jdahep
      COMMON /hepevt/
     $      nevhep,           ! serial number
     $      nhep,             ! number of particles
     $      isthep(nmxhep),   ! status code
     $      idhep(nmxhep),    ! particle ident KF
     $      jmohep(2,nmxhep), ! parent particles
     $      jdahep(2,nmxhep), ! childreen particles
     $      phep(5,nmxhep),   ! four-momentum, mass [GeV]
     $      vhep(4,nmxhep)    ! vertex [mm]

      DO 10 I=1,5
        SUMVEC(I)=0.
 10   CONTINUE
C     HEADER
      WRITE(*,9000)
      WRITE(*,9010) NEVHEP
      WRITE(*,9080)
      WRITE(*,9020)

C     PARTICLES
      DO 30 I=1,NHEP
C--
C--   For 'stable particle' calculate vector momentum sum
        IF (JDAHEP(1,I).EQ.0) THEN
          DO 20 J=1,4
            SUMVEC(J)=SUMVEC(J)+PHEP(J,I)
 20       CONTINUE
          IF (JMOHEP(2,I).EQ.0) THEN
            WRITE(*,9030) I,IDHEP(I),JMOHEP(1,I),(PHEP(J,I),J=1,5)
          ELSE
            WRITE(*,9040) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),(PHEP
     &      (J,I),J=1,5)
          ENDIF
        ELSE
          IF (JMOHEP(2,I).EQ.0) THEN
            WRITE(*,9050) I,IDHEP(I),JMOHEP(1,I),JDAHEP(1,I),
     &      JDAHEP(2,I),(PHEP(J,I),J=1,5)
          ELSE
            WRITE(*,9060) I,IDHEP(I),JMOHEP(1,I),JMOHEP(2,I),
     &      JDAHEP(1,I),JDAHEP(2,I),(PHEP(J,I),J=1,5)
          ENDIF
        ENDIF
   30 CONTINUE
      SUMVEC(5)=SQRT(SUMVEC(4)**2-SUMVEC(1)**2-SUMVEC(2)**2-
     &SUMVEC(3)**2)
      WRITE(*,9070) (SUMVEC(J),J=1,5)
      RETURN
 9000 FORMAT(1H0,80('='))
 9010 FORMAT(1H ,29X,'Event No.:',I10)
 9020 FORMAT(1H0,1X,'Nr',3X,'Type',3X,'Parent(s)',2X,'Daughter(s)',6X,
     &'Px',7X,'Py',7X,'Pz',7X,'E',4X,'Inv. M.')
 9030 FORMAT(1H ,I4,I7,3X,I4,9X,'Stable',2X,5F9.2)
 9040 FORMAT(1H ,I4,I7,I4,' - ',I4,5X,'Stable',2X,5F9.2)
 9050 FORMAT(1H ,I4,I7,3X,I4,6X,I4,' - ',I4,5F9.2)
 9060 FORMAT(1H ,I4,I7,I4,' - ',I4,2X,I4,' - ',I4,5F9.2)
 9070 FORMAT(1H0,23X,'Vector Sum: ', 5F9.2)
 9080 FORMAT(1H0,6X,'Particle Parameters')
      END