]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/PHOTOS/photos_make.F
bug fix
[u/mrichter/AliRoot.git] / TEvtGen / PHOTOS / photos_make.F
CommitLineData
da0e9ce3 1 SUBROUTINE PHOTOS_MAKE(IPARR)
2C.----------------------------------------------------------------------
3C.
4C. PHOTOS_MAKE: General search routine
5C.
6C. Purpose: Search through the /PH_HEPEVT/ standard HEP common, sta-
7C. rting from the IPPAR-th particle. Whenevr branching
8C. point is found routine PHTYPE(IP) is called.
9C. Finally if calls on PHTYPE(IP) modified entries, common
10C /PH_HEPEVT/ is ordered.
11C.
12C. Input Parameter: IPPAR: Pointer to decaying particle in
13C. /PH_HEPEVT/ and the common itself,
14C.
15C. Output Parameters: Common /PH_HEPEVT/, either with or without
16C. new particles added.
17C.
18C. Author(s): Z. Was, B. van Eijk Created at: 26/11/89
19C. Last Update: 30/08/93
20C.
21C.----------------------------------------------------------------------
22 IMPLICIT NONE
23 REAL*8 PHOTON(5)
24 INTEGER IP,IPARR,IPPAR,I,J,K,L,NLAST
25 DOUBLE PRECISION DATA
26 INTEGER MOTHER,POSPHO
27 LOGICAL CASCAD
28 INTEGER NMXHEP
29 PARAMETER (NMXHEP=10000)
30 INTEGER IDHEP,ISTHEP,JDAHEP,JMOHEP,NEVHEP,NHEP
31 REAL*8 PHEP,VHEP
32 COMMON/PH_HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
33 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
34 LOGICAL QEDRAD
35 COMMON/PHOQED/QEDRAD(NMXHEP)
36 INTEGER NMXPHO
37 PARAMETER (NMXPHO=10000)
38 INTEGER ISTACK(0:NMXPHO),NUMIT,NTRY,KK,LL,II,NA,FIRST,LAST
39 INTEGER FIRSTA,LASTA,IPP,IDA1,IDA2,MOTHER2,IDPHO,ISPHO
40 REAL*8 PORIG(5,NMXPHO)
41C--
42 IPPAR=ABS(IPARR)
43C-- Store pointers for cascade treatement...
44 IP=IPPAR
45 NLAST=NHEP
46 CASCAD=.FALSE.
47C--
48C-- Check decay multiplicity and minimum of correctness..
49 IF ((JDAHEP(1,IP).EQ.0).OR.(JMOHEP(1,JDAHEP(1,IP)).NE.IP)) RETURN
50C--
51C-- single branch mode
52C-- we start looking for the decay points in the cascade
53C-- IPPAR is original position where the program was called
54 ISTACK(0)=IPPAR
55C-- NUMIT denotes number of secondary decay branches
56 NUMIT=0
57C-- NTRY denotes number of secondary branches already checked for
58C-- for existence of further branches
59 NTRY=0
60C-- let's search if IPARR does not prevent searching.
61 IF (IPARR.GT.0) THEN
62 30 CONTINUE
63 DO I=JDAHEP(1,IP),JDAHEP(2,IP)
64 IF (JDAHEP(1,I).NE.0.AND.JMOHEP(1,JDAHEP(1,I)).EQ.I) THEN
65 NUMIT=NUMIT+1
66 IF (NUMIT.GT.NMXPHO) THEN
67 DATA=NUMIT
68 CALL PHOERR(7,'PHOTOS',DATA)
69 ENDIF
70 ISTACK(NUMIT)=I
71 ENDIF
72 ENDDO
73 IF(NUMIT.GT.NTRY) THEN
74 NTRY=NTRY+1
75 IP=ISTACK(NTRY)
76 GOTO 30
77 ENDIF
78 ENDIF
79C-- let's do generation
80 DO 25 KK=0,NUMIT
81 NA=NHEP
82 FIRST=JDAHEP(1,ISTACK(KK))
83 LAST=JDAHEP(2,ISTACK(KK))
84 DO II=1,LAST-FIRST+1
85 DO LL=1,5
86 PORIG(LL,II)=PHEP(LL,FIRST+II-1)
87 ENDDO
88 ENDDO
89C--
90 CALL PHTYPE(ISTACK(KK))
91C--
92C-- Correct energy/momentum of cascade daughters
93 IF(NHEP.GT.NA) THEN
94 DO II=1,LAST-FIRST+1
95 IPP=FIRST+II-1
96 FIRSTA=JDAHEP(1,IPP)
97 LASTA=JDAHEP(2,IPP)
98 IF(JMOHEP(1,IPP).EQ.ISTACK(KK))
99 $ CALL PHOBOS(IPP,PORIG(1,II),PHEP(1,IPP),FIRSTA,LASTA)
100 ENDDO
101 ENDIF
102 25 CONTINUE
103C--
104C-- rearrange /PH_HEPEVT/ to get correct order..
105 IF (NHEP.GT.NLAST) THEN
106 DO 160 I=NLAST+1,NHEP
107C--
108C-- Photon mother and position...
109 MOTHER=JMOHEP(1,I)
110 POSPHO=JDAHEP(2,MOTHER)+1
111C-- Intermediate save of photon energy/momentum and pointers
112 DO 90 J=1,5
113 90 PHOTON(J)=PHEP(J,I)
114 ISPHO =ISTHEP(I)
115 IDPHO =IDHEP(I)
116 MOTHER2 =JMOHEP(2,I)
117 IDA1 =JDAHEP(1,I)
118 IDA2 =JDAHEP(2,I)
119C--
120C-- Exclude photon in sequence !
121 IF (POSPHO.NE.NHEP) THEN
122C--
123C--
124C-- Order /PH_HEPEVT/
125 DO 120 K=I,POSPHO+1,-1
126 ISTHEP(K)=ISTHEP(K-1)
127 QEDRAD(K)=QEDRAD(K-1)
128 IDHEP(K)=IDHEP(K-1)
129 DO 100 L=1,2
130 JMOHEP(L,K)=JMOHEP(L,K-1)
131 100 JDAHEP(L,K)=JDAHEP(L,K-1)
132 DO 110 L=1,5
133 110 PHEP(L,K)=PHEP(L,K-1)
134 DO 120 L=1,4
135 120 VHEP(L,K)=VHEP(L,K-1)
136C--
137C-- Correct pointers assuming most dirty /PH_HEPEVT/...
138 DO 130 K=1,NHEP
139 DO 130 L=1,2
140 IF ((JMOHEP(L,K).NE.0).AND.(JMOHEP(L,K).GE.
141 & POSPHO)) JMOHEP(L,K)=JMOHEP(L,K)+1
142 IF ((JDAHEP(L,K).NE.0).AND.(JDAHEP(L,K).GE.
143 & POSPHO)) JDAHEP(L,K)=JDAHEP(L,K)+1
144 130 CONTINUE
145C--
146C-- Store photon energy/momentum
147 DO 140 J=1,5
148 140 PHEP(J,POSPHO)=PHOTON(J)
149 ENDIF
150C--
151C-- Store pointers for the photon...
152 JDAHEP(2,MOTHER)=POSPHO
153 ISTHEP(POSPHO)=ISPHO
154 IDHEP(POSPHO)=IDPHO
155 JMOHEP(1,POSPHO)=MOTHER
156 JMOHEP(2,POSPHO)=MOTHER2
157 JDAHEP(1,POSPHO)=IDA1
158 JDAHEP(2,POSPHO)=IDA2
159C--
160C-- Get photon production vertex position
161 DO 150 J=1,4
162 150 VHEP(J,POSPHO)=VHEP(J,POSPHO-1)
163 160 CONTINUE
164 ENDIF
165 RETURN
166 END