]> git.uio.no Git - u/mrichter/AliRoot.git/blob - jetset/lu3ent.F
Update master to aliroot
[u/mrichter/AliRoot.git] / jetset / lu3ent.F
1  
2 C********************************************************************* 
3  
4       SUBROUTINE LU3ENT(IP,KF1,KF2,KF3,PECM,X1,X3) 
5  
6 C...Purpose: to store three partons or particles in their CM frame, 
7 C...with the first along the +z axis and the third in the (x,z) 
8 C...plane with x > 0. 
9       COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5) 
10       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
11       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4) 
12       SAVE /LUJETS/,/LUDAT1/,/LUDAT2/ 
13  
14 C...Standard checks. 
15       MSTU(28)=0 
16       IF(MSTU(12).GE.1) CALL LULIST(0) 
17       IPA=MAX(1,IABS(IP)) 
18       IF(IPA.GT.MSTU(4)-2) CALL LUERRM(21, 
19      &'(LU3ENT:) writing outside LUJETS memory') 
20       KC1=LUCOMP(KF1) 
21       KC2=LUCOMP(KF2) 
22       KC3=LUCOMP(KF3) 
23       IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0) CALL LUERRM(12, 
24      &'(LU3ENT:) unknown flavour code') 
25  
26 C...Find masses. Reset K, P and V vectors. 
27       PM1=0. 
28       IF(MSTU(10).EQ.1) PM1=P(IPA,5) 
29       IF(MSTU(10).GE.2) PM1=ULMASS(KF1) 
30       PM2=0. 
31       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5) 
32       IF(MSTU(10).GE.2) PM2=ULMASS(KF2) 
33       PM3=0. 
34       IF(MSTU(10).EQ.1) PM3=P(IPA+2,5) 
35       IF(MSTU(10).GE.2) PM3=ULMASS(KF3) 
36       DO 110 I=IPA,IPA+2 
37       DO 100 J=1,5 
38       K(I,J)=0 
39       P(I,J)=0. 
40       V(I,J)=0. 
41   100 CONTINUE 
42   110 CONTINUE 
43  
44 C...Check flavours. 
45       KQ1=KCHG(KC1,2)*ISIGN(1,KF1) 
46       KQ2=KCHG(KC2,2)*ISIGN(1,KF2) 
47       KQ3=KCHG(KC3,2)*ISIGN(1,KF3) 
48       IF(MSTU(19).EQ.1) THEN 
49         MSTU(19)=0 
50       ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0) THEN 
51       ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.(KQ1+KQ3.EQ.0.OR. 
52      &KQ1+KQ3.EQ.4)) THEN 
53       ELSE 
54         CALL LUERRM(2,'(LU3ENT:) unphysical flavour combination') 
55       ENDIF 
56       K(IPA,2)=KF1 
57       K(IPA+1,2)=KF2 
58       K(IPA+2,2)=KF3 
59  
60 C...Store partons/particles in K vectors for normal case. 
61       IF(IP.GE.0) THEN 
62         K(IPA,1)=1 
63         IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0)) K(IPA,1)=2 
64         K(IPA+1,1)=1 
65         IF(KQ2.NE.0.AND.KQ3.NE.0) K(IPA+1,1)=2 
66         K(IPA+2,1)=1 
67  
68 C...Store partons in K vectors for parton shower evolution. 
69       ELSE 
70         K(IPA,1)=3 
71         K(IPA+1,1)=3 
72         K(IPA+2,1)=3 
73         KCS=4 
74         IF(KQ1.EQ.-1) KCS=5 
75         K(IPA,KCS)=MSTU(5)*(IPA+1) 
76         K(IPA,9-KCS)=MSTU(5)*(IPA+2) 
77         K(IPA+1,KCS)=MSTU(5)*(IPA+2) 
78         K(IPA+1,9-KCS)=MSTU(5)*IPA 
79         K(IPA+2,KCS)=MSTU(5)*IPA 
80         K(IPA+2,9-KCS)=MSTU(5)*(IPA+1) 
81       ENDIF 
82  
83 C...Check kinematics. 
84       MKERR=0 
85       IF(0.5*X1*PECM.LE.PM1.OR.0.5*(2.-X1-X3)*PECM.LE.PM2.OR. 
86      &0.5*X3*PECM.LE.PM3) MKERR=1 
87       PA1=SQRT(MAX(1E-10,(0.5*X1*PECM)**2-PM1**2)) 
88       PA2=SQRT(MAX(1E-10,(0.5*(2.-X1-X3)*PECM)**2-PM2**2)) 
89       PA3=SQRT(MAX(1E-10,(0.5*X3*PECM)**2-PM3**2)) 
90       CTHE2=(PA3**2-PA1**2-PA2**2)/(2.*PA1*PA2) 
91       CTHE3=(PA2**2-PA1**2-PA3**2)/(2.*PA1*PA3) 
92       IF(ABS(CTHE2).GE.1.001.OR.ABS(CTHE3).GE.1.001) MKERR=1 
93       CTHE3=MAX(-1.,MIN(1.,CTHE3)) 
94       IF(MKERR.NE.0) CALL LUERRM(13, 
95      &'(LU3ENT:) unphysical kinematical variable setup') 
96  
97 C...Store partons/particles in P vectors. 
98       P(IPA,3)=PA1 
99       P(IPA,4)=SQRT(PA1**2+PM1**2) 
100       P(IPA,5)=PM1 
101       P(IPA+2,1)=PA3*SQRT(1.-CTHE3**2) 
102       P(IPA+2,3)=PA3*CTHE3 
103       P(IPA+2,4)=SQRT(PA3**2+PM3**2) 
104       P(IPA+2,5)=PM3 
105       P(IPA+1,1)=-P(IPA+2,1) 
106       P(IPA+1,3)=-P(IPA,3)-P(IPA+2,3) 
107       P(IPA+1,4)=SQRT(P(IPA+1,1)**2+P(IPA+1,3)**2+PM2**2) 
108       P(IPA+1,5)=PM2 
109  
110 C...Set N. Optionally fragment/decay. 
111       N=IPA+2 
112       IF(IP.EQ.0) CALL LUEXEC 
113  
114       RETURN 
115       END