A sample FORTRAN program is contained in the PATCH FATUSER on the FATMEN PAM. A CRADLE to produce this FORTRAN is currently stored in FATUSER CRADLE on FAT3's 191 disk on CERNVM. An additional example is given below: this example loads information from DELPHI's Production Summary File (PSF) and adds it to the FATMEN file catalogue.
Other examples programs, including generation of a FORTRAN program from scratch, are to be found in the tutorial section of this manual.
Example of a PSF file
COMM *********************************************************************************** COMM *** Institute and computer identifier COMM *********************************************************************************** INST CERN CC IBM3090 COMM *********************************************************************************** COMM *** List of Raw Data cass. from august 1989 Pilot Run COMM *********************************************************************************** TDAS EP0001 X ALLD/RAWD/E091.0 0/P01R000314/NONE/F001/CERN/V001/#000003/#000384* UDAS No S-O-R. TDAS EP0002 X ALLD/RAWD/E091.00 /P01R000315/NONE/F001/CERN/V001/#000002/#000140 TDAS EP0003 C X ALLD/RAWD/E091.00 /P01R000315/NONE/F002/CERN/V001/#100002/#100203 UDAS 100000 added to event numbers because of duplicate run/event numbering in DAS system TDAS EP0004 C01 X ALLD/RAWD/E091.00/P01R000315/NONE/F003/CERN/V001/# 200002/#203148 UDAS 200000 added to event numbers because of duplicate run/event numbering in DAS system TDAS EP0005 C 01 X ALLD/RAWD/E091.00 /P01R000316/NONE/F001/CERN/V001/#000002/#000193 TDAS EP0006 C 01 X ALLD/RAWD/E091.00 /P01R000317/NONE/F001/CERN/V001/#000002/#000235 TDAS EP0007 C 01 X ALLD/RAWD/E091.00 /P01R000317/NONE/F002/CERN/V001/#000002/#000222 TDAS EP0008 C 01 X ALLD/RAWD/E091.00/ P01R000318/NONE/F001/CERN/V001/#000003/#000786 UDAS No S-O-R.
Using the FATMEN database from FORTRAN
PROGRAM FATDEL *----------------------------------------------------------------------* * * * Example FATMEN program, which reads DELPHI Production Summary File * * and adds information to FATMEN database. * * In this example, only TDAS records are processed. * * * *----------------------------------------------------------------------* * * Stuff for ZEBRA * PARAMETER (LURCOR=200000) COMMON/CRZT/IXSTOR,IXDIV,IFENCE(2),LEV,LEVIN,BLVECT(LURCOR) DIMENSION LQ(999),IQ(999),Q(999) EQUIVALENCE (IQ(1),Q(1),LQ(9)),(LQ(1),LEV) COMMON /USRLNK/LUSRK1,LUSRBK,LUSRLS COMMON /QUEST/IQUEST(100) PARAMETER (LKEYFA=10) DIMENSION KEY(LKEYFA) CHARACTER*1 CHLUN * * Initialise ZEBRA * CALL MZEBRA(-3) CALL MZSTOR(IXSTOR,'/CRZT/','Q',IFENCE,LEV,BLVECT(1),BLVECT(1), + BLVECT(5000),BLVECT(LURCOR)) CALL MZLOGL(IXSTOR,-3) * * *** Define user division and link area like: * CALL MZDIV (IXSTOR, IXDIV, 'USERS', 50000, LURCOR, 'L') CALL MZLINK (IXSTOR, '/USRLNK/', LUSRK1, LUSRLS, LUSRK1) * * Units for RZ database, FZ update files and PSF * LUNRZ = 1 LUNFZ = 2 LUNPSF = 3 * * Issue FILEDEF for PSF * WRITE(CHLUN,'(I1)') LUNPSF CALL VMCMS('FILEDEF '//CHLUN// +' DISK CERN PSF * (LRECL 132 RECFM F)',IRC) * * Initialise FATMEN for DELPHI * CALL FMINIT(IXSTOR,LUNRZ,LUNFZ,'//CERN/DELPHI',IRC) * * Process information in PSF * CALL ADDPSF(LUNPSF) END SUBROUTINE ADDPSF(LUNPSF) * Start sequence FATPARA * * Keys PARAMETER ( MKSRFA= 1, MKFNFA= 2, MKCLFA=7, MKMTFA=8 1 ,MKLCFA= 9, MKNBFA=10, NKDSFA=10 ) * ** *** Bank offsets * PARAMETER ( MFQNFA= 1, MHSNFA= 65, MCPLFA= 67, MMTPFA= 68 1 ,MLOCFA= 69, MHSTFA= 70, MHOSFA= 74 2 ,MVSNFA= 77, MVIDFA= 79, MVIPFA= 81, MDENFA= 82 3 ,MVSQFA= 83, MFSQFA= 84, MSRDFA= 85, MERDFA= 86 4 ,MSBLFA= 87, MEBLFA= 88, MRFMFA= 89, MRLNFA= 90 5 ,MBLNFA= 91, MFLFFA= 92, MFUTFA= 93, MCRTFA= 94 6 ,MCTTFA= 95, MLATFA= 96, MCURFA= 97, MCIDFA= 99 7 ,MCNIFA=101, MCJIFA=103, MFPRFA=105, MSYWFA=106 8 ,MUSWFA=116, MUCMFA=126, NWDSFA=145 9 ,MFSZFA=MSYWFA) * End sequence FATPARA PARAMETER (LURCOR=200000) COMMON/CRZT/IXSTOR,IXDIV,IFENCE(2),LEV,LEVIN,BLVECT(LURCOR) DIMENSION LQ(999),IQ(999),Q(999) EQUIVALENCE (IQ(1),Q(1),LQ(9)),(LQ(1),LEV) * COMMON /USRLNK/LUSRK1,LUSRBK,LUSRLS * COMMON /QUEST/IQUEST(100) PARAMETER (LKEYFA=10) DIMENSION KEYS(LKEYFA) CHARACTER*132 CARD CHARACTER*240 GENEN CHARACTER UFORM(4)*1,FFORM(4)*2 DATA UFORM/'N','X','A','G'/ DATA FFORM/'FZ','FX','FA','AS'/ DATA NCARDS/0/,NPROC/0/ 1 CONTINUE * * Process all records in file * READ(LUNPSF,'(A132)',END=99) CARD NCARDS = NCARDS + 1 * * Got a PSF line, now process * IF (CARD(1:4) .EQ. 'TDAS') THEN PRINT *,'Processing ',CARD NPROC = NPROC + 1 * * Format of TDAS card is: * *23456789_123456789_123456789_123456789_123456789_123456789_123456789_ *KEY VID----- M FS F Generic name * * where M = media type (C=cart, T=tape) * FS = File sequence number * F = file format * CALL CFILL(' ',GENEN,1,240) GENEN = CARD(59:119) LGEN = LENOCC(GENEN) * * Create bank for this generic name * CALL FMLIFT('//CERN/DELPHI/'//GENEN(1:LGEN), + KEYS,'3480','U',IRC) * * Get address of the bank * CALL FMLINK('//CERN/DELPHI/'//GENEN(1:LGEN),LFAT,' ',IRC) * * Dataset name is always DELPHI * CALL UCTOH('DELPHI',IQ(LFAT+MFQNFA),4,6) * * Set values according to information found in PSF * READ(CARD(17:18),'(I2)') IFILE IQ(LFAT+MFSQFA) = IFILE CALL UCTOH(CARD(6:13),IQ(LFAT+MVIDFA),4,6) CALL UCTOH(CARD(6:13),IQ(LFAT+MVSNFA),4,6) IMATCH = ICNTH(CARD(57:57),UFORM,4) CALL UCTOH(FFORM(IMATCH),IQ(LFAT+MFLFFA),4,2) * * Write bank to RZ file (and ORACLE...) * CALL FMPUT('//CERN/DELPHI/'//GENEN(1:LGEN),LFAT,IRC) ELSE * PRINT *,'Unrecognised card ',CARD(1:4) ENDIF GOTO 1 99 CONTINUE PRINT *,'EOF on PSF file found, LUN=',LUNPSF PRINT *,NCARDS,' records found, of which ',NPROC,' processed' END