]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gphys/ganni.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / gphys / ganni.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/02/27 10:08:11 ravndal
6* Precision problem in cos(theta) solved
7*
8* Revision 1.1.1.1 1995/10/24 10:21:21 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/02 29/03/94 15.41.21 by S.Giani
14*-- Author :
15 SUBROUTINE GANNI
16C.
17C. ******************************************************************
18C. * *
19C. * Generates positron annihilation *
20C. * *
21C. * ==>Called by : GTELEC *
22C. * Author L.Urban ********* *
23C. * 10/06/93: modified by Georges Azuelos (Vancouver) *
24C * to include 1-quantum annihilation *
25C. * *
26C. ******************************************************************
27C.
28#include "geant321/gcphys.inc"
29#include "geant321/gctrak.inc"
30#include "geant321/gccuts.inc"
31#include "geant321/gcking.inc"
32#include "geant321/gconsp.inc"
33#include "geant321/gcbank.inc"
34#include "geant321/gcmulo.inc"
35#include "geant321/gcjloc.inc"
36#include "geant321/gcmate.inc"
37 DIMENSION PGAM(3),RNDM(2)
38 LOGICAL ROTATE
39 PARAMETER (ALFA=7.29735E-3)
40C.
41C. ------------------------------------------------------------------
42C.
43 KCASE = NAMEC(11)
44 IF((IANNI.NE.1).OR.((GETOT+EMASS).LE.CUTGAM)) THEN
45 ISTOP = 2
46 DESTEP = DESTEP + GETOT + EMASS
47 GEKIN = 0.
48 GETOT = EMASS
49 VECT(7)= 0.
50 GO TO 999
51 ENDIF
52C
53 XE=GETOT
54 GAM=XE/EMASS
55 GAM2=GAM**2
56 GAM1=MAX(GAM2-1.,0.)
57 GAMP1=GAM+1.
58 C=SQRT(GAM1)
59*
60 SIG=(GAM2+4.*GAM+1.)*LOG(GAM+C)/GAM1-(GAM+3.)/C
61 SIG=0.5*Q(JPROB+17)*SIG/GAMP1
62*
63 BIND=0.5*(Z*ALFA)**2*EMASS
64 E1Q=XE+EMASS-BIND
65 IF(E1Q .GT. 0.)THEN
66 GVE=VECT(7)/EMASS
67 SIG1=GAM2+2.*(GAM+2.)/3.-(GAM+2.)/GVE*LOG(GAM+GVE)
68 SIG1=2.*Q(JPROB+18)*SIG1/(GVE*GAMP1**2)
69 ELSE
70 SIG1=0.
71 END IF
72*
73 SIG=SIG+SIG1
74 CALL GRNDM(RNDM,1)
75C
76 IF(RNDM(1).GE.SIG1/SIG)THEN
77 GAMP12=GAMP1**2
78 P=VECT(7)
79 E0=1./(GAMP1+C)
80C
81 10 CALL GRNDM(RNDM,2)
82 E=E0*((1.-E0)/E0)**RNDM(1)
83C
84 SCREJ=(GAMP12+2.*GAMP1-2.-GAMP12*E-1./E)/(GAMP12-2.)
85 IF(RNDM(2).GT.SCREJ) GOTO 10
86C
87 EPHOT1=(XE+EMASS)*E
88C
89 COSTH=(GEKIN+EMASS*(2.*E-1.)/E)/P
90C
91C restrict COSTH to [-1.,+1.]
92C
93 COSTH = MIN( 1. , MAX( -1. , COSTH ) )
94 SINTH=SQRT((1.-COSTH)*(1.+COSTH))
95 CALL GRNDM(RNDM,1)
96 PHI = TWOPI * RNDM(1)
97 COSPHI = COS(PHI)
98 SINPHI = SIN(PHI)
99C
100 PGAM(1) = EPHOT1* SINTH * COSPHI
101 PGAM(2) = EPHOT1* SINTH * SINPHI
102 PGAM(3) = EPHOT1* COSTH
103C
104C Rotate tracks into GEANT system and store.
105C
106 CALL GFANG(VECT(4),COSAL,SINAL,COSBT,SINBT,ROTATE)
107C
108C Polar co-ordinates to momentum components.
109C
110 NGGAMM = 0
111 IF(EPHOT1.GT.CUTGAM) THEN
112 NGGAMM = NGGAMM + 1
113 NGKINE = NGKINE + 1
114 GKIN(1,NGKINE) = PGAM(1)
115 GKIN(2,NGKINE) = PGAM(2)
116 GKIN(3,NGKINE) = PGAM(3)
117 GKIN(4,NGKINE) = EPHOT1
118 GKIN(5,NGKINE) = 1
119 TOFD(NGKINE)=0.
120 GPOS(1,NGKINE) = VECT(1)
121 GPOS(2,NGKINE) = VECT(2)
122 GPOS(3,NGKINE) = VECT(3)
123 IF(ROTATE)
124 + CALL GDROT(GKIN(1,NGKINE),COSAL,SINAL,COSBT,SINBT)
125 ELSE
126 DESTEP = DESTEP + EPHOT1
127 ENDIF
128C
129C Momentum vector of second photon.
130C
131 EPHOT2 = GETOT + EMASS - EPHOT1
132 IF(EPHOT2.GT.CUTGAM) THEN
133 NGGAMM = NGGAMM + 1
134 NGKINE = NGKINE + 1
135 GKIN(1,NGKINE) = - PGAM(1)
136 GKIN(2,NGKINE) = - PGAM(2)
137 GKIN(3,NGKINE) = P - PGAM(3)
138 GKIN(4,NGKINE) = EPHOT2
139 GKIN(5,NGKINE) = 1
140 TOFD(NGKINE)=0.
141 GPOS(1,NGKINE) = VECT(1)
142 GPOS(2,NGKINE) = VECT(2)
143 GPOS(3,NGKINE) = VECT(3)
144 IF(ROTATE)
145 + CALL GDROT(GKIN(1,NGKINE),COSAL,SINAL,COSBT,SINBT)
146 ELSE
147 DESTEP = DESTEP + EPHOT2
148 ENDIF
149 ELSE
150C 1-quantum annihilation
151 P=VECT(7)
152 EPHOT=E1Q
153C Assume photon collinear with positron
154 PGAM(1) = 0.
155 PGAM(2) = 0.
156 PGAM(3) = EPHOT
157C
158C Rotate tracks into GEANT system and store.
159C
160 CALL GFANG(VECT(4),COSAL,SINAL,COSBT,SINBT,ROTATE)
161C
162C Polar co-ordinates to momentum components.
163C
164 NGGAMM = 0
165 IF(EPHOT.GT.CUTGAM) THEN
166 NGGAMM = NGGAMM + 1
167 NGKINE = NGKINE + 1
168 GKIN(1,NGKINE) = PGAM(1)
169 GKIN(2,NGKINE) = PGAM(2)
170 GKIN(3,NGKINE) = PGAM(3)
171 GKIN(4,NGKINE) = EPHOT
172 GKIN(5,NGKINE) = 1
173 TOFD(NGKINE)=0.
174 GPOS(1,NGKINE) = VECT(1)
175 GPOS(2,NGKINE) = VECT(2)
176 GPOS(3,NGKINE) = VECT(3)
177 IF(ROTATE)
178 + CALL GDROT(GKIN(1,NGKINE),COSAL,SINAL,COSBT,SINBT)
179 ELSE
180 DESTEP = DESTEP + EPHOT
181 ENDIF
182 END IF
183C
184 IF(NGGAMM.GT.0) THEN
185 ISTOP = 1
186 ELSE
187 ISTOP = 2
188 ENDIF
189C
190 999 END