SUBROUTINE CDRFHV( * * outputs * : REFHV, STATUS) * * Module Number: 15.9.2.1.1 * * Module Name: * * Keyphrase: * ---------- * input nominal (reference) voltages of HSP detectors. * * Description: * ------------ * read the reference voltages for all detectors from a table * * FORTRAN Name: CDRFHV.FOR * * Keywords of Accessed Files and Tables: * -------------------------------------- * Name I/O Description / Comments * 'refhv' I reference voltage table name * * column names in 'refhv' * * 'DET_NUM' I detector ID * 'VOLTAGE' I reference voltage * * Subroutines Called: * ------------------- * CDBS: * CDTIN * SDAS: * UCLGST, UTRGTR, UTRGTI, UTTCLO, UMSPUT * OTHERS: * None * * History: * -------- * Version Date Author Description * 1 01-15-86 J.-C. Hsu Design and coding * 2 09-15-87 J.-C. Hsu F77 standard *------------------------------------------------------------------------------- * *== output: * --reference voltages REAL REFHV(1) * --error status INTEGER STATUS * *== local: * --detector id INTEGER DETID, * --loop index : I, * --number of rows and columns : NROWS, NCOLS, * --error status : STAT(10), STATOK, * --table pointer and column ID : TP, COLIDN(10) * --high voltage setting REAL HV LOGICAL NULMSK(10) CHARACTER*1 CHAR1 * --column names CHARACTER*16 COLNAM(10) * --table name CHARACTER*128 TBNAME * --error message context CHARACTER*130 CONTXT, MESS *=========================begin hsp.inc========================================= * --status return code INTEGER OK, ERRNUM(20) INTEGER DEST, PRIO DATA OK /0/ DATA ERRNUM /701, 702, 703, 704, 705, 706, 707, 708, 709, 710, : 711, 712, 713, 714, 715, 716, 717, 718, 719, 720/ * --message destination and priority DATA DEST, PRIO /1, 0/ *=========================end hsp.inc=========================================== *------------------------------------------------------------------------------- * * initialization * DO 10 I = 1, 5 REFHV(I) = 0. 10 CONTINUE * * set up reference high voltage table * NCOLS = 2 COLNAM(1) = 'DET_NUM' COLNAM(2) = 'VOLTAGE' * CALL UCLGST ('refhv', TBNAME, STATUS) IF (STATUS .NE. OK) THEN CONTXT = 'cannot get reference high voltage table keyword ' : // 'name' GO TO 999 END IF * CALL CDTIN (TBNAME, COLNAM, NCOLS, TP, COLIDN, NROWS, STATUS) IF (STATUS .NE. OK) THEN CONTXT = 'cannot set up reference high voltage table' GO TO 999 END IF * * read reference high voltage table * DO 20 I = 1, NROWS CALL UTRGTI (TP, COLIDN(1), 1, I, : DETID, NULMSK(1), STAT(1)) CALL UTRGTR (TP, COLIDN(2), 1, I, : HV, NULMSK(2), STAT(2)) IF (STAT(1) .EQ. OK .AND. STAT(2) .EQ. OK .AND. : (.NOT. NULMSK(1)) .AND. (.NOT. NULMSK(2))) THEN REFHV(DETID) = HV ELSE STATUS = ERRNUM(1) CONTXT = 'error reading reference high voltage table' GO TO 999 END IF 20 CONTINUE * * close table * CALL UTTCLO (TP, STATUS) IF (STATUS .NE. OK) THEN CONTXT = 'cannot close input table' GO TO 999 END IF * * check if there is any overlapping reference voltage * DO 30 I = 1, 5 IF (REFHV(I) .EQ. 0.) THEN WRITE (CHAR1, '(I1)') I STATUS = ERRNUM(2) CONTXT = 'detector #' // CHAR1 // ' has no reference ' : // 'voltage' GO TO 999 END IF 30 CONTINUE * STATUS = OK GO TO 1000 * * write error message * 999 MESS = 'CDRFHV: ' // CONTXT CALL UMSPUT (MESS, DEST, PRIO, STATOK) * 1000 RETURN END