]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gheisha/poisso.F
New configurale version.
[u/mrichter/AliRoot.git] / GEANT321 / gheisha / poisso.F
CommitLineData
fe4da5cc 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)
13C
14C *** GENERATION OF POISSON DISTRIBUTION ***
15C *** NVE 16-MAR-1988 CERN GENEVA ***
16C
17 DIMENSION RNDM(1)
18C ORIGIN : H.FESEFELDT (27-OCT-1983)
19C
20C --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
21 IF(XAV.GT.9.9) GOTO 2
22C
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)
34C** 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
40C** 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
46C** 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