]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/PHOTOS/phodo.F
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / TEvtGen / PHOTOS / phodo.F
1       SUBROUTINE PHODO(IP,NCHARB,NEUDAU)
2 C.----------------------------------------------------------------------
3 C.
4 C.    PHOTOS:   PHOton radiation in  decays DOing of KINematics
5 C.
6 C.    Purpose:  Starting  from   the  charged  particle energy/momentum,
7 C.              PNEUTR, photon  energy  fraction and photon  angle  with
8 C.              respect  to  the axis formed by charged particle energy/
9 C.              momentum  vector  and PNEUTR, scale the energy/momentum,
10 C.              keeping the original direction of the neutral system  in
11 C.              the lab. frame untouched.
12 C.
13 C.    Input Parameters:   IP:      Pointer  to   decaying  particle   in
14 C.                                 /PHOEVT/  and   the   common   itself
15 C.                        NCHARB:  pointer to the charged radiating
16 C.                                 daughter in /PHOEVT/.
17 C.                        NEUDAU:  pointer to the first neutral daughter
18 C.    Output Parameters:  Common /PHOEVT/, with photon added.
19 C.
20 C.    Author(s):  Z. Was, B. van Eijk             Created at:  26/11/89
21 C.                                                Last Update: 27/05/93
22 C.
23 C.----------------------------------------------------------------------
24       IMPLICIT NONE
25       DOUBLE PRECISION PHOAN1,PHOAN2,ANGLE,FI1,FI3,FI4,FI5,TH1,TH3,TH4
26       DOUBLE PRECISION PARNE,QNEW,QOLD,DATA
27       INTEGER IP,FI3DUM,I,J,NEUDAU,FIRST,LAST
28       INTEGER NCHARB
29       REAL*8 EPHOTO,PMAVIR,PHOTRI
30       REAL*8 GNEUT,PHORAN,CCOSTH,SSINTH,PVEC(4)
31       INTEGER NMXPHO
32       PARAMETER (NMXPHO=10000)
33       INTEGER IDPHO,ISTPHO,JDAPHO,JMOPHO,NEVPHO,NPHO
34       REAL*8 PPHO,VPHO
35       COMMON/PHOEVT/NEVPHO,NPHO,ISTPHO(NMXPHO),IDPHO(NMXPHO),
36      &JMOPHO(2,NMXPHO),JDAPHO(2,NMXPHO),PPHO(5,NMXPHO),VPHO(4,NMXPHO)
37       DOUBLE PRECISION MCHSQR,MNESQR
38       REAL*8 PNEUTR
39       COMMON/PHOMOM/MCHSQR,MNESQR,PNEUTR(5)
40       DOUBLE PRECISION COSTHG,SINTHG
41       REAL*8 XPHMAX,XPHOTO
42       COMMON/PHOPHS/XPHMAX,XPHOTO,COSTHG,SINTHG
43       REAL*8 PI,TWOPI
44       COMMON/PHPICO/PI,TWOPI
45 C--
46       EPHOTO=XPHOTO*PPHO(5,IP)/2.D0
47       PMAVIR=SQRT(PPHO(5,IP)*(PPHO(5,IP)-2.D0*EPHOTO))
48 C--
49 C--   Reconstruct  kinematics  of  charged particle  and  neutral system
50       FI1=PHOAN1(PNEUTR(1),PNEUTR(2))
51 C--
52 C--   Choose axis along  z of  PNEUTR, calculate  angle  between x and y
53 C--   components  and z  and x-y plane and  perform Lorentz transform...
54       TH1=PHOAN2(PNEUTR(3),SQRT(PNEUTR(1)**2+PNEUTR(2)**2))
55       CALL PHORO3(-FI1,PNEUTR(1))
56       CALL PHORO2(-TH1,PNEUTR(1))
57 C--
58 C--   Take  away  photon energy from charged particle and PNEUTR !  Thus
59 C--   the onshell charged particle  decays into virtual charged particle
60 C--   and photon.  The virtual charged  particle mass becomes:
61 C--   SQRT(PPHO(5,IP)*(PPHO(5,IP)-2*EPHOTO)).  Construct  new PNEUTR mo-
62 C--   mentum in the rest frame of the parent:
63 C--   1) Scaling parameters...
64       QNEW=PHOTRI(PMAVIR,PNEUTR(5),PPHO(5,NCHARB))
65       QOLD=PNEUTR(3)
66       GNEUT=(QNEW**2+QOLD**2+MNESQR)/(QNEW*QOLD+SQRT((QNEW**2+MNESQR)*
67      &(QOLD**2+MNESQR)))
68       IF (GNEUT.LT.1.D0) THEN
69         DATA=0.D0
70         CALL PHOERR(4,'PHOKIN',DATA)
71       ENDIF
72       PARNE=GNEUT-SQRT(MAX(GNEUT**2-1.0D0,0.D0))
73 C--
74 C--   2) ...reductive boost...
75       CALL PHOBO3(PARNE,PNEUTR)
76 C--
77 C--   ...calculate photon energy in the reduced system...
78       NPHO=NPHO+1
79       ISTPHO(NPHO)=1
80       IDPHO(NPHO) =22
81 C--   Photon mother and daughter pointers !
82       JMOPHO(1,NPHO)=IP
83       JMOPHO(2,NPHO)=0
84       JDAPHO(1,NPHO)=0
85       JDAPHO(2,NPHO)=0
86       PPHO(4,NPHO)=EPHOTO*PPHO(5,IP)/PMAVIR
87 C--
88 C--   ...and photon momenta
89       CCOSTH=-COSTHG
90       SSINTH=SINTHG
91       TH3=PHOAN2(CCOSTH,SSINTH)
92       FI3=TWOPI*PHORAN(FI3DUM)
93       PPHO(1,NPHO)=PPHO(4,NPHO)*SINTHG*COS(FI3)
94       PPHO(2,NPHO)=PPHO(4,NPHO)*SINTHG*SIN(FI3)
95 C--
96 C--   Minus sign because axis opposite direction of charged particle !
97       PPHO(3,NPHO)=-PPHO(4,NPHO)*COSTHG
98       PPHO(5,NPHO)=0.D0
99 C--
100 C--   Rotate in order to get photon along z-axis
101       CALL PHORO3(-FI3,PNEUTR(1))
102       CALL PHORO3(-FI3,PPHO(1,NPHO))
103       CALL PHORO2(-TH3,PNEUTR(1))
104       CALL PHORO2(-TH3,PPHO(1,NPHO))
105       ANGLE=EPHOTO/PPHO(4,NPHO)
106 C--
107 C--   Boost to the rest frame of decaying particle
108       CALL PHOBO3(ANGLE,PNEUTR(1))
109       CALL PHOBO3(ANGLE,PPHO(1,NPHO))
110 C--
111 C--   Back in the parent rest frame but PNEUTR not yet oriented !
112       FI4=PHOAN1(PNEUTR(1),PNEUTR(2))
113       TH4=PHOAN2(PNEUTR(3),SQRT(PNEUTR(1)**2+PNEUTR(2)**2))
114       CALL PHORO3(FI4,PNEUTR(1))
115       CALL PHORO3(FI4,PPHO(1,NPHO))
116 C--
117         DO 60 I=2,4
118    60   PVEC(I)=0.D0
119         PVEC(1)=1.D0
120         CALL PHORO3(-FI3,PVEC)
121         CALL PHORO2(-TH3,PVEC)
122         CALL PHOBO3(ANGLE,PVEC)
123         CALL PHORO3(FI4,PVEC)
124         CALL PHORO2(-TH4,PNEUTR)
125         CALL PHORO2(-TH4,PPHO(1,NPHO))
126         CALL PHORO2(-TH4,PVEC)
127         FI5=PHOAN1(PVEC(1),PVEC(2))
128 C--
129 C--   Charged particle restores original direction
130         CALL PHORO3(-FI5,PNEUTR)
131         CALL PHORO3(-FI5,PPHO(1,NPHO))
132         CALL PHORO2(TH1,PNEUTR(1))
133         CALL PHORO2(TH1,PPHO(1,NPHO))
134         CALL PHORO3(FI1,PNEUTR)
135         CALL PHORO3(FI1,PPHO(1,NPHO))
136 C--   See whether neutral system has multiplicity larger than 1...
137       IF ((JDAPHO(2,IP)-JDAPHO(1,IP)).GT.1) THEN
138 C--   Find pointers to components of 'neutral' system
139 C--
140         FIRST=NEUDAU
141         LAST=JDAPHO(2,IP)
142         DO 70 I=FIRST,LAST
143           IF (I.NE.NCHARB.AND.(JMOPHO(1,I).EQ.IP)) THEN
144 C--
145 C--   Reconstruct kinematics...
146             CALL PHORO3(-FI1,PPHO(1,I))
147             CALL PHORO2(-TH1,PPHO(1,I))
148 C--
149 C--   ...reductive boost
150             CALL PHOBO3(PARNE,PPHO(1,I))
151 C--
152 C--   Rotate in order to get photon along z-axis
153             CALL PHORO3(-FI3,PPHO(1,I))
154             CALL PHORO2(-TH3,PPHO(1,I))
155 C--
156 C--   Boost to the rest frame of decaying particle
157             CALL PHOBO3(ANGLE,PPHO(1,I))
158 C--
159 C--   Back in the parent rest-frame but PNEUTR not yet oriented.
160             CALL PHORO3(FI4,PPHO(1,I))
161             CALL PHORO2(-TH4,PPHO(1,I))
162 C--
163 C--   Charged particle restores original direction
164             CALL PHORO3(-FI5,PPHO(1,I))
165             CALL PHORO2(TH1,PPHO(1,I))
166             CALL PHORO3(FI1,PPHO(1,I))
167           ENDIF
168    70   CONTINUE
169       ELSE
170 C--
171 C--   ...only one 'neutral' particle in addition to photon!
172         DO 80 J=1,4
173    80   PPHO(J,NEUDAU)=PNEUTR(J)
174       ENDIF
175 C--
176 C--   All 'neutrals' treated, fill /PHOEVT/ for charged particle...
177       DO 90 J=1,3
178    90 PPHO(J,NCHARB)=-(PPHO(J,NPHO)+PNEUTR(J))
179       PPHO(4,NCHARB)=PPHO(5,IP)-(PPHO(4,NPHO)+PNEUTR(4))
180 C--
181       END