PROGRAM MC01 C C- Example of elementary program C- which uses CERN Library's HBOOK C- and some subroutines for random numbers C C- INPUT : Fortran unit 1 (mc01.input) C- OUTPUT: Fortran unit 2 (mc01.output) PLUS histogram file (mc01.hrout) C PARAMETER (NHBMEM=1000000) COMMON/PAWC/PIPPO(NHBMEM) CHARACTER*4 CH4 PARAMETER (LEN=100000) ! Maximum number of fills for each histogram REAL VEC(LEN) C- CALL HLIMIT(NHBMEM) PI=ACOS(-1.) C- OPEN(UNIT=1,STATUS='OLD') ! INPUT (filename declared in the script) N=0 10 CONTINUE READ(1,*) ICODE,NFILL ! read CODE of random number generator and number of fills IF(ICODE.LT.0) GOTO 3 ! no more generators N=N+1 ID=1000*N+ICODE ! histogram identifier (ICODE can appear more than once) IF(NFILL.GT.LEN) NFILL=LEN WRITE(CH4,'(I4)') ICODE IF(ICODE.LE.4) THEN CALL HBOOK1(ID,' Uniform generator no. '//CH4 &, 100,0.,1.,0.) ELSEIF(ICODE.EQ.5) THEN CALL HBOOK1(ID,' Gaussian generator no. '//CH4 &, 100,-10.,10.,0.) ENDIF WRITE(2,*) ' Starting generation with gen. type ',ICODE,' ID=',ID C- Generate a sequence of random numbers IF(ICODE.EQ.1) THEN ! uniform RANMAR (cernlib V113) CALL RANMAR(VEC,LEN) ELSEIF(ICODE.EQ.2) THEN ! uniform RANLUX (cernlib V115) luxury level 2 CALL RLUXGO(2,0,0,0) ! default initialization (LUX=2, INT=0) CALL RANLUX(VEC,LEN) ! generate uniform sequence of length LEN ELSEIF(ICODE.EQ.3) THEN ! uniform RANLUX (cernlib V115) luxury level 3 CALL RLUXGO(3,0,0,0) ! default initialization (LUX=3, INT=0) CALL RANLUX(VEC,LEN) ! generate uniform sequence of length LEN ELSEIF(ICODE.EQ.4) THEN ! uniform RANLUX (cernlib V115) luxury level 4 CALL RLUXGO(4,0,0,0) ! default initialization (LUX=4, INT=0) CALL RANLUX(VEC,LEN) ! generate uniform sequence of length LEN ELSEIF(ICODE.EQ.5) THEN ! gaussian RNORML (cernlib V120) CALL RNORML(VEC,LEN) ! generate gaussian sequence of length LEN ENDIF ! icode C- Fill the 1-D histogram DO I=1,NFILL X=VEC(I) CALL HFILL(ID,X,0.,1.) END DO ! I=1,LEN GOTO 10 ! next generator 3 CONTINUE WRITE(2,*) ' End of generation ' CLOSE(1) C- C- Output histograms on file: C- CALL HRPUT(0,'mc01.hrout','n') ! output hist. file END