]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/gheisha/poisso.F
removed unnecessary includes
[u/mrichter/AliRoot.git] / GEANT321 / gheisha / poisso.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:59  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.38  by  S.Giani
11 *-- Author :
12       SUBROUTINE POISSO(XAV,IRAN)
13 C
14 C *** GENERATION OF POISSON DISTRIBUTION ***
15 C *** NVE 16-MAR-1988 CERN GENEVA ***
16 C
17       DIMENSION RNDM(1)
18 C ORIGIN : H.FESEFELDT (27-OCT-1983)
19 C
20 C --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
21       IF(XAV.GT.9.9) GOTO 2
22 C
23       MM=IFIX(5.*XAV)
24       IRAN=0
25       IF(MM.LE.0) GOTO 3
26       R=EXP(-XAV)
27       CALL GRNDM(RNDM,1)
28       RAN1=RNDM(1)
29       IF(RAN1.LE.R) RETURN
30       RR=R
31       DO 1 I=1,MM
32       IRAN=IRAN+1
33       IF(I.LE.5) RRR=XAV**I/NFAC(I)
34 C** STIRLING' S FORMULA FOR LARGE NUMBERS
35       IF(I.GT.5) RRR=EXP(I*LOG(XAV)-(I+0.5)*LOG(I*1.)+I-0.9189385)
36       RR=RR+R*RRR
37       IF(RAN1.LE.RR) RETURN
38     1 CONTINUE
39       RETURN
40 C** NORMAL DISTRIBUTION WITH SIGMA**2 = <X>
41     2 CALL NORMAL(RAN1)
42       RAN1=XAV+RAN1*SQRT(XAV)
43       IRAN=IFIX(RAN1)
44       IF(IRAN.LT.0) IRAN=0
45       RETURN
46 C** FOR VERY SMALL XAV TRY IRAN=1,2,3
47     3 P1=XAV*EXP(-XAV)
48       P2=XAV*P1/2.
49       P3=XAV*P2/3.
50       CALL GRNDM(RNDM,1)
51       RAN=RNDM(1)
52       IRAN=3
53       IF(RAN.LT.P3) RETURN
54       IRAN=2
55       IF(RAN.LT.P2) RETURN
56       IRAN=1
57       IF(RAN.LT.P1) RETURN
58       IRAN=0
59       RETURN
60       END