]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HIJING/hipyset1_35/pykmap_hijing.F
fWSN->Eval(0.001) to avoid fpe.
[u/mrichter/AliRoot.git] / HIJING / hipyset1_35 / pykmap_hijing.F
1 * $Id$
2     
3 C*********************************************************************  
4     
5       SUBROUTINE PYKMAP_HIJING(IVAR,MVAR,VVAR) 
6     
7 C...Maps a uniform distribution into a distribution of a kinematical    
8 C...variable according to one of the possibilities allowed. It is   
9 C...assumed that kinematical limits have been set by a PYKLIM call. 
10 #include "ludat2_hijing.inc"
11 #include "pyint1_hijing.inc"
12 #include "pyint2_hijing.inc"
13     
14 C...Convert VVAR to tau variable.   
15       ISUB=MINT(1)  
16       IF(IVAR.EQ.1) THEN    
17         TAUMIN=VINT(11) 
18         TAUMAX=VINT(31) 
19         IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN 
20           TAURE=VINT(73)    
21           GAMRE=VINT(74)    
22         ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN 
23           TAURE=VINT(75)    
24           GAMRE=VINT(76)    
25         ENDIF   
26         IF(MINT(43).EQ.1.AND.(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.2)) THEN 
27           TAU=1.    
28         ELSEIF(MVAR.EQ.1) THEN  
29           TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR  
30         ELSEIF(MVAR.EQ.2) THEN  
31           TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)   
32         ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN 
33           RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX    
34           TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN) 
35         ELSE    
36           AUPP=ATAN((TAUMAX-TAURE)/GAMRE)   
37           ALOW=ATAN((TAUMIN-TAURE)/GAMRE)   
38           TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)    
39         ENDIF   
40         VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))    
41     
42 C...Convert VVAR to y* variable.    
43       ELSEIF(IVAR.EQ.2) THEN    
44         YSTMIN=VINT(12) 
45         YSTMAX=VINT(32) 
46         IF(MINT(43).EQ.1) THEN  
47           YST=0.    
48         ELSEIF(MINT(43).EQ.2) THEN  
49           IF(ISET(ISUB).LE.2) YST=-0.5*LOG(VINT(21))    
50           IF(ISET(ISUB).GE.3) YST=-0.5*LOG(VINT(26))    
51         ELSEIF(MINT(43).EQ.3) THEN  
52           IF(ISET(ISUB).LE.2) YST=0.5*LOG(VINT(21)) 
53           IF(ISET(ISUB).GE.3) YST=0.5*LOG(VINT(26)) 
54         ELSEIF(MVAR.EQ.1) THEN  
55           YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR) 
56         ELSEIF(MVAR.EQ.2) THEN  
57           YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1.-VVAR)  
58         ELSE    
59           AUPP=ATAN(EXP(YSTMAX))    
60           ALOW=ATAN(EXP(YSTMIN))    
61           YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))   
62         ENDIF   
63         VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))    
64     
65 C...Convert VVAR to cos(theta-hat) variable.    
66       ELSEIF(IVAR.EQ.3) THEN    
67         RM34=2.*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2 
68         RSQM=1.+RM34    
69         IF(2.*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001) RM34=MAX(RM34,  
70      &  2.*VINT(71)**2/(VINT(21)*VINT(2)))  
71         CTNMIN=VINT(13) 
72         CTNMAX=VINT(33) 
73         CTPMIN=VINT(14) 
74         CTPMAX=VINT(34) 
75         IF(MVAR.EQ.1) THEN  
76           ANEG=CTNMAX-CTNMIN    
77           APOS=CTPMAX-CTPMIN    
78           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
79             VCTN=VVAR*(ANEG+APOS)/ANEG  
80             CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN 
81           ELSE  
82             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
83             CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP 
84           ENDIF 
85         ELSEIF(MVAR.EQ.2) THEN  
86           RMNMIN=MAX(RM34,RSQM-CTNMIN)  
87           RMNMAX=MAX(RM34,RSQM-CTNMAX)  
88           RMPMIN=MAX(RM34,RSQM-CTPMIN)  
89           RMPMAX=MAX(RM34,RSQM-CTPMAX)  
90           ANEG=LOG(RMNMIN/RMNMAX)   
91           APOS=LOG(RMPMIN/RMPMAX)   
92           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
93             VCTN=VVAR*(ANEG+APOS)/ANEG  
94             CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN   
95           ELSE  
96             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
97             CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP   
98           ENDIF 
99         ELSEIF(MVAR.EQ.3) THEN  
100           RMNMIN=MAX(RM34,RSQM+CTNMIN)  
101           RMNMAX=MAX(RM34,RSQM+CTNMAX)  
102           RMPMIN=MAX(RM34,RSQM+CTPMIN)  
103           RMPMAX=MAX(RM34,RSQM+CTPMAX)  
104           ANEG=LOG(RMNMAX/RMNMIN)   
105           APOS=LOG(RMPMAX/RMPMIN)   
106           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
107             VCTN=VVAR*(ANEG+APOS)/ANEG  
108             CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM   
109           ELSE  
110             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
111             CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM   
112           ENDIF 
113         ELSEIF(MVAR.EQ.4) THEN  
114           RMNMIN=MAX(RM34,RSQM-CTNMIN)  
115           RMNMAX=MAX(RM34,RSQM-CTNMAX)  
116           RMPMIN=MAX(RM34,RSQM-CTPMIN)  
117           RMPMAX=MAX(RM34,RSQM-CTPMAX)  
118           ANEG=1./RMNMAX-1./RMNMIN  
119           APOS=1./RMPMAX-1./RMPMIN  
120           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
121             VCTN=VVAR*(ANEG+APOS)/ANEG  
122             CTH=RSQM-1./(1./RMNMIN+ANEG*VCTN)   
123           ELSE  
124             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
125             CTH=RSQM-1./(1./RMPMIN+APOS*VCTP)   
126           ENDIF 
127         ELSEIF(MVAR.EQ.5) THEN  
128           RMNMIN=MAX(RM34,RSQM+CTNMIN)  
129           RMNMAX=MAX(RM34,RSQM+CTNMAX)  
130           RMPMIN=MAX(RM34,RSQM+CTPMIN)  
131           RMPMAX=MAX(RM34,RSQM+CTPMAX)  
132           ANEG=1./RMNMIN-1./RMNMAX  
133           APOS=1./RMPMIN-1./RMPMAX  
134           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
135             VCTN=VVAR*(ANEG+APOS)/ANEG  
136             CTH=1./(1./RMNMIN-ANEG*VCTN)-RSQM   
137           ELSE  
138             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
139             CTH=1./(1./RMPMIN-APOS*VCTP)-RSQM   
140           ENDIF 
141         ENDIF   
142         IF(CTH.LT.0.) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))   
143         IF(CTH.GT.0.) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))   
144         VINT(23)=CTH    
145     
146 C...Convert VVAR to tau' variable.  
147       ELSEIF(IVAR.EQ.4) THEN    
148         TAU=VINT(11)    
149         TAUPMN=VINT(16) 
150         TAUPMX=VINT(36) 
151         IF(MINT(43).EQ.1) THEN  
152           TAUP=1.   
153         ELSEIF(MVAR.EQ.1) THEN  
154           TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR 
155         ELSE    
156           AUPP=(1.-TAU/TAUPMX)**4   
157           ALOW=(1.-TAU/TAUPMN)**4   
158           TAUP=TAU/(1.-(ALOW+(AUPP-ALOW)*VVAR)**0.25)   
159         ENDIF   
160         VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))   
161       ENDIF 
162     
163       RETURN    
164       END