]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HIJING/hipyset1_35/luzdis_hijing.F
- Reset TProcessID count after each event
[u/mrichter/AliRoot.git] / HIJING / hipyset1_35 / luzdis_hijing.F
1 * $Id$
2     
3 C*********************************************************************  
4     
5       SUBROUTINE LUZDIS_HIJING(KFL1,KFL2,PR,Z) 
6     
7 C...Purpose: to generate the longitudinal splitting variable z. 
8 #include "ludat1_hijing.inc"
9     
10 C...Check if heavy flavour fragmentation.   
11       KFLA=IABS(KFL1)   
12       KFLB=IABS(KFL2)   
13       KFLH=KFLA 
14       IF(KFLA.GE.10) KFLH=MOD(KFLA/1000,10) 
15     
16 C...Lund symmetric scaling function: determine parameters of shape. 
17       IF(MSTJ(11).EQ.1.OR.(MSTJ(11).EQ.3.AND.KFLH.LE.3)) THEN   
18         FA=PARJ(41) 
19         IF(MSTJ(91).EQ.1) FA=PARJ(43)   
20         IF(KFLB.GE.10) FA=FA+PARJ(45)   
21         FB=PARJ(42)*PR  
22         IF(MSTJ(91).EQ.1) FB=PARJ(44)*PR    
23         FC=1.   
24         IF(KFLA.GE.10) FC=FC-PARJ(45)   
25         IF(KFLB.GE.10) FC=FC+PARJ(45)   
26         MC=1    
27         IF(ABS(FC-1.).GT.0.01) MC=2 
28     
29 C...Determine position of maximum. Special cases for a = 0 or a = c.    
30         IF(FA.LT.0.02) THEN 
31           MA=1  
32           ZMAX=1.   
33           IF(FC.GT.FB) ZMAX=FB/FC   
34         ELSEIF(ABS(FC-FA).LT.0.01) THEN 
35           MA=2  
36           ZMAX=FB/(FB+FC)   
37         ELSE    
38           MA=3  
39           ZMAX=0.5*(FB+FC-SQRT((FB-FC)**2+4.*FA*FB))/(FC-FA)    
40           IF(ZMAX.GT.0.99.AND.FB.GT.100.) ZMAX=1.-FA/FB 
41         ENDIF   
42     
43 C...Subdivide z range if distribution very peaked near endpoint.    
44         MMAX=2  
45         IF(ZMAX.LT.0.1) THEN    
46           MMAX=1    
47           ZDIV=2.75*ZMAX    
48           IF(MC.EQ.1) THEN  
49             FINT=1.-LOG(ZDIV)   
50           ELSE  
51             ZDIVC=ZDIV**(1.-FC) 
52             FINT=1.+(1.-1./ZDIVC)/(FC-1.)   
53           ENDIF 
54         ELSEIF(ZMAX.GT.0.85.AND.FB.GT.1.) THEN  
55           MMAX=3    
56           FSCB=SQRT(4.+(FC/FB)**2)  
57           ZDIV=FSCB-1./ZMAX-(FC/FB)*LOG(ZMAX*0.5*(FSCB+FC/FB))  
58           IF(MA.GE.2) ZDIV=ZDIV+(FA/FB)*LOG(1.-ZMAX)    
59           ZDIV=MIN(ZMAX,MAX(0.,ZDIV))   
60           FINT=1.+FB*(1.-ZDIV)  
61         ENDIF   
62     
63 C...Choice of z, preweighted for peaks at low or high z.    
64   100   Z=RLU_HIJING(0)    
65         FPRE=1. 
66         IF(MMAX.EQ.1) THEN  
67           IF(FINT*RLU_HIJING(0).LE.1.) THEN    
68             Z=ZDIV*Z    
69           ELSEIF(MC.EQ.1) THEN  
70             Z=ZDIV**Z   
71             FPRE=ZDIV/Z 
72           ELSE  
73             Z=1./(ZDIVC+Z*(1.-ZDIVC))**(1./(1.-FC)) 
74             FPRE=(ZDIV/Z)**FC   
75           ENDIF 
76         ELSEIF(MMAX.EQ.3) THEN  
77           IF(FINT*RLU_HIJING(0).LE.1.) THEN    
78             Z=ZDIV+LOG(Z)/FB    
79             FPRE=EXP(FB*(Z-ZDIV))   
80           ELSE  
81             Z=ZDIV+Z*(1.-ZDIV)  
82           ENDIF 
83         ENDIF   
84     
85 C...Weighting according to correct formula. 
86         IF(Z.LE.FB/(50.+FB).OR.Z.GE.1.) GOTO 100    
87         FVAL=(ZMAX/Z)**FC*EXP(FB*(1./ZMAX-1./Z))    
88         IF(MA.GE.2) FVAL=((1.-Z)/(1.-ZMAX))**FA*FVAL    
89         IF(FVAL.LT.RLU_HIJING(0)*FPRE) GOTO 100    
90     
91 C...Generate z according to Field-Feynman, SLAC, (1-z)**c OR z**c.  
92       ELSE  
93         FC=PARJ(50+MAX(1,KFLH)) 
94         IF(MSTJ(91).EQ.1) FC=PARJ(59)   
95   110   Z=RLU_HIJING(0)    
96         IF(FC.GE.0..AND.FC.LE.1.) THEN  
97           IF(FC.GT.RLU_HIJING(0)) Z=1.-Z**(1./3.)  
98         ELSEIF(FC.GT.-1.) THEN  
99            IF(-4.*FC*Z*(1.-Z)**2.LT.RLU_HIJING(0)*((1.-Z)**2-FC*Z)**2)
100      $          GOTO 110 
101         ELSE    
102           IF(FC.GT.0.) Z=1.-Z**(1./FC)  
103           IF(FC.LT.0.) Z=Z**(-1./FC)    
104         ENDIF   
105       ENDIF 
106     
107       RETURN    
108       END