]> git.uio.no Git - u/mrichter/AliRoot.git/blob - pythia/pyinki.F
Update master to aliroot
[u/mrichter/AliRoot.git] / pythia / pyinki.F
1  
2 C*********************************************************************
3  
4       SUBROUTINE PYINKI(MODKI)
5  
6 C...Sets up kinematics, including rotations and boosts to/from CM frame.
7       COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
8       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
9       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
10       COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
11       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12       COMMON/PYINT1/MINT(400),VINT(400)
13       SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
14       SAVE /PYSUBS/,/PYPARS/,/PYINT1/
15  
16 C...Set initial flavour state.
17       N=2
18       DO 100 I=1,2
19       K(I,1)=1
20       K(I,2)=MINT(10+I)
21   100 CONTINUE
22  
23 C...Reset boost. Do kinematics for various cases.
24       DO 110 J=6,10
25       VINT(J)=0.
26   110 CONTINUE
27  
28 C...Set up kinematics for events defined in CM frame.
29       IF(MINT(111).EQ.1) THEN
30         WIN=VINT(290)
31         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
32         S=WIN**2
33         P(1,5)=VINT(3)
34         P(2,5)=VINT(4)
35         P(1,1)=0.
36         P(1,2)=0.
37         P(2,1)=0.
38         P(2,2)=0.
39         P(1,3)=SQRT(((S-P(1,5)**2-P(2,5)**2)**2-(2.*P(1,5)*P(2,5))**2)/
40      &  (4.*S))
41         P(2,3)=-P(1,3)
42         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
43         P(2,4)=SQRT(P(2,3)**2+P(2,5)**2)
44  
45 C...Set up kinematics for fixed target events.
46       ELSEIF(MINT(111).EQ.2) THEN
47         WIN=VINT(290)
48         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
49         P(1,5)=VINT(3)
50         P(2,5)=VINT(4)
51         P(1,1)=0.
52         P(1,2)=0.
53         P(2,1)=0.
54         P(2,2)=0.
55         P(1,3)=WIN
56         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
57         P(2,3)=0.
58         P(2,4)=P(2,5)
59         S=P(1,5)**2+P(2,5)**2+2.*P(2,4)*P(1,4)
60         VINT(10)=P(1,3)/(P(1,4)+P(2,4))
61         CALL LUROBO(0.,0.,0.,0.,-VINT(10))
62  
63 C...Set up kinematics for events in user-defined frame.
64       ELSEIF(MINT(111).EQ.3) THEN
65         P(1,5)=VINT(3)
66         P(2,5)=VINT(4)
67         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
68         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
69         DO 120 J=1,3
70         VINT(7+J)=(DBLE(P(1,J))+DBLE(P(2,J)))/DBLE(P(1,4)+P(2,4))
71   120   CONTINUE
72         CALL LUROBO(0.,0.,-VINT(8),-VINT(9),-VINT(10))
73         VINT(7)=ULANGL(P(1,1),P(1,2))
74         CALL LUROBO(0.,-VINT(7),0.,0.,0.)
75         VINT(6)=ULANGL(P(1,3),P(1,1))
76         CALL LUROBO(-VINT(6),0.,0.,0.,0.)
77         S=P(1,5)**2+P(2,5)**2+2.*(P(1,4)*P(2,4)-P(1,3)*P(2,3))
78  
79 C...Set up kinematics for events with user-defined four-vectors.
80       ELSEIF(MINT(111).EQ.4) THEN
81         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
82         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
83         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
84         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
85         DO 130 J=1,3
86         VINT(7+J)=(DBLE(P(1,J))+DBLE(P(2,J)))/DBLE(P(1,4)+P(2,4))
87   130   CONTINUE
88         CALL LUROBO(0.,0.,-VINT(8),-VINT(9),-VINT(10))
89         VINT(7)=ULANGL(P(1,1),P(1,2))
90         CALL LUROBO(0.,-VINT(7),0.,0.,0.)
91         VINT(6)=ULANGL(P(1,3),P(1,1))
92         CALL LUROBO(-VINT(6),0.,0.,0.,0.)
93         S=(P(1,4)+P(2,4))**2
94  
95 C...Set up kinematics for events with user-defined five-vectors.
96       ELSEIF(MINT(111).EQ.5) THEN
97         DO 140 J=1,3
98         VINT(7+J)=(DBLE(P(1,J))+DBLE(P(2,J)))/DBLE(P(1,4)+P(2,4))
99   140   CONTINUE
100         CALL LUROBO(0.,0.,-VINT(8),-VINT(9),-VINT(10))
101         VINT(7)=ULANGL(P(1,1),P(1,2))
102         CALL LUROBO(0.,-VINT(7),0.,0.,0.)
103         VINT(6)=ULANGL(P(1,3),P(1,1))
104         CALL LUROBO(-VINT(6),0.,0.,0.,0.)
105         S=(P(1,4)+P(2,4))**2
106       ENDIF
107  
108 C...Return or error for too low CM energy.
109       IF(MODKI.EQ.1.AND.S.LT.PARP(2)**2) THEN
110         IF(MSTP(172).LE.1) THEN
111           CALL LUERRM(23,
112      &    '(PYINKI:) too low invariant mass in this event')
113         ELSE
114           MSTI(61)=1
115           RETURN
116         ENDIF
117       ENDIF
118  
119 C...Save information on incoming particles.
120       VINT(1)=SQRT(S)
121       VINT(2)=S
122       IF(MINT(111).GE.4) VINT(3)=P(1,5)
123       IF(MINT(111).GE.4) VINT(4)=P(2,5)
124       VINT(5)=P(1,3)
125       IF(MODKI.EQ.0) VINT(289)=S
126       DO 150 J=1,5
127       V(1,J)=0.
128       V(2,J)=0.
129       VINT(290+J)=P(1,J)
130       VINT(295+J)=P(2,J)
131   150 CONTINUE
132  
133 C...Store pT cut-off and related constants to be used in generation.
134       IF(MODKI.EQ.0) VINT(285)=CKIN(3)
135       IF(MSTP(82).LE.1) THEN
136         IF(MINT(121).GT.1) PARP(81)=1.30+0.15*LOG(VINT(1)/200.)/
137      &  LOG(900./200.)
138         PTMN=PARP(81)
139       ELSE
140         IF(MINT(121).GT.1) PARP(82)=1.25+0.15*LOG(VINT(1)/200.)/
141      &  LOG(900./200.)
142         PTMN=PARP(82)
143       ENDIF
144       VINT(149)=4.*PTMN**2/S
145  
146       RETURN
147       END