SUBROUTINE VEVALP * * Module Number: 15.0.1 * * Module Name: polyeval * * Keyphrase: * ---------- * Calculate calibration corrections * * Description: * ------------ * Calculate calibration corrections of the following HSP quantities: * (1) dark signal, * (2) pre-amplifier noise, * (3) high voltage factor, * (4) cathod efficiency, * (5) gain factor, * (6) CVC offset, and * (7) dead time * * FORTRAN Name: VEVALP.FOR * * Keywords of Accessed Files and Tables: * -------------------------------------- * Name I/O Description / Comments * * Keyword from CL parameter file * * 'outtable' I keyword of output data table * * input table column names: * * 'DETECTOB' I object detector ID * 'APERTOBJ' I aperture name * 'VOLTAGE' I high voltage setting * 'VGAIND' I gain setting * 'THRESH' I discriminator threshold setting * 'DET_TEMP' I detector temperature * 'DEA_TEMP' I DEA temperature * 'EPOCH' I epoch * 'PTSRCFLG' I point source flag (point or extended) * * column names of output calibration corrections: * * 'DARK_D' O digital dark signal * 'DARK_A' O analog dark signal * 'PREAMP_D' O digital preamplifier noise * 'PREAMP_A' O analog preamplifier noise * 'HVFACT_D' O digital high voltage factor * 'HVFACT_A' O analog high voltage factor * 'SENSITIV' O relative sensitivity * 'GAINFACT' O gain factor * 'CVCOFFST' O CVC offset * 'DEADTIME' O dead time * 'DARK_D_ERR' O error of digital dark signal * 'DARK_A_ERR' O error of analog dark signal * 'PREAMP_D_ERR' O error of digital preamplifier noise * 'PREAMP_A_ERR' O error of analog preamplifier noise * 'HVFACT_D_ERR' O error of digital high voltage factor * 'HVFACT_A_ERR' O error of analog high voltage factor * 'SENSITIV_ERR' O error of relative sensitivity * 'GAINFACT_ERR' O error of gain factor * 'CVCOFFST_ERR' O error of CVC offset * 'DEADTIME_ERR' O error of dead time * 'APERAREA' O aperture area * * Subroutines Called: * ------------------- * CDBS: * VCALGT, CDTOUT, VGTCTP, VDKEVL, VPAEVL, VHVEVL, VSNEVL, VGNEVL, VCVEVL, * VDTEVL, VASIZE * SDAS: * UCLGST, UTRGTI, UTRGTT, UTRGTR, UTRGTD, UTRPTR, UTTCLO, UMSPUT * OTHERS: * None * * History: * -------- * Version Date Author Description * 1 04-15-86 J.-C. Hsu Design and coding * 2 08-15-87 J.-C. Hsu F77 standard * 3 09-07-89 J.-C. Hsu use same routines as CALHSP * *------------------------------------------------------------------------------- * *== local: * --maximum dimensions of arrays INTEGER DKDIM, PADIM, HVDIM, SNDIM, : GNDIM, CVDIM, DTDIM, DKADIM, AARDIM * --define maximum dimensions of arrays PARAMETER (DKDIM = 300) PARAMETER (PADIM = 40) PARAMETER (HVDIM = 120) PARAMETER (SNDIM = 300) PARAMETER (GNDIM = 100) PARAMETER (CVDIM = 100) PARAMETER (DTDIM = 60) PARAMETER (DKADIM = 200) PARAMETER (AARDIM = 200) * * --aperture names and dark aperture names * --in the dark aperture translation table CHARACTER*10 DKAP(DKADIM), DKNAME(DKADIM), * --aperture names in the aperture area * --table : AREAAP(AARDIM), * --aperture names in each calibration table : DKAPER(DKDIM), SNAPER(SNDIM), * --data types of each calibration table : DKTYPE(DKDIM), PATYPE(PADIM), : HVTYPE(HVDIM) * --detector ID in each calibration table * --(PA = pre-amp, HV = high voltage * --factor, CV = CVC offset, DT = dead * --time, DM = dummy, DK = dark signal, * --GN = gain factor, SN = relative * --sensitivity) INTEGER PADET(PADIM), HVDET(HVDIM), : GNDET(GNDIM), CVDET(CVDIM), : DTDET(DTDIM), DKDET(DKADIM), * --number of rows in dark aperture * --translation table : NDKAP, * --number of rows in aperture area table : NAREA, * --number of data entries in each * --calibration table : NDK, NHV, NPA, NSN, NGN, NCV, NDT * --high voltage settings in each * --calibration table REAL DKHV(DKDIM), HVHV(HVDIM), DTHV(DTDIM), * --gain settings in each calibration table : GNGAIN(GNDIM), CVGAIN(CVDIM), * --discriminator threshold settings in * --the dead time calibration table : DTDISC(DTDIM), * --aperture area in the aperture are table : AREA(AARDIM), * --base values of each calibration table : DKBASE(DKDIM), PABASE(PADIM), : HVBASE(HVDIM), * --relative sensitivity has two base * --values for each set of coefficients : SNBSPT(SNDIM), SNBSEX(SNDIM), : GNBASE(GNDIM), CVBASE(CVDIM), : DTBASE(DTDIM), * --polynominal coefficients of calibration : DKCOFF(16,DKDIM), PACOFF(16,PADIM), : HVCOFF(16,HVDIM), SNCOFF(16,SNDIM), : GNCOFF(16,GNDIM), CVCOFF(16,CVDIM), * --deadtime temperature dependent coeff : DTCOFF(DTDIM), * --zero points of temperature in each * --calibration table : DKTMP0(DKDIM), PATMP0(PADIM), : HVTMP0(HVDIM), SNTMP0(SNDIM), : GNTMP0(GNDIM), CVTMP0(CVDIM), : DTTMP0(DTDIM) * --zero points of epoch in each * --calibration table DOUBLE PRECISION DKEP0(DKDIM), PAEP0(PADIM), : HVEP0(HVDIM), SNEP0(SNDIM), : GNEP0(GNDIM), CVEP0(CVDIM) * --return status INTEGER STATUS, * --return status : STAT(30), STATOK, * --detector ID of input data : DET, * --number of rows in table : NROWS, * --number of columns : NCOLS, INCOLS, ONCOLS, * --table pointer and column ID's : TP, COLIDN(50), * --loop indices : I, K, * --data type : DTYPE(50) * --high voltage setting of input data REAL HV, * --gain setting of input data : GAIN, * --discriminator threshold setting of * --input data : DISCR, * --detector temperature of input data : DETTMP, * --DEA temperature of input data : DEATMP, * --column buffer : COLBUF(50) * --epoch of input data DOUBLE PRECISION EPOCH * --point source flag of input data CHARACTER*1 PTFLAG, * -dummy variables : OBSID CHARACTER*5 CHAR5 * --column format CHARACTER*8 COLFMT(50) * --aperture ID of input data CHARACTER*10 APERT * --column units CHARACTER*16 UNIT(50), * --column names of the attributes in outtable : CNAME(50) * --file name of the dark signal table CHARACTER*128 DKTBL, * --file name of the pre-amp noise table : PATBL, * --file name of the high voltage factor table : HVTBL, * --file name of the relative sensitivity * --table : SNTBL, * --file name of the gain factor table : GNTBL, * --file name of the CVC offset table : CVTBL, * --file name of the deadtime table : DTTBL, * --file name of the dark aperture translation * --table : DKATBL, * --file name of the aperture size table : AARTBL, * -output table names : FILE * --error message context CHARACTER*130 CONTXT, MESS LOGICAL NULMSK(300) *==========================begin iraf77.inc (without INTEGER*2)================= * Include file for the iraf77 FORTRAN interface to the IRAF VOS * Get IRAF common into main program * LOGICAL MEMB(1) INTEGER MEMI(1) INTEGER MEML(1) REAL MEMR(1) DOUBLE PRECISION MEMD(1) COMPLEX MEMX(1) EQUIVALENCE (MEMB, MEMI, MEML, MEMR, MEMD, MEMX) COMMON /MEM/ MEMD * * File I/O access modes * INTEGER RDONLY PARAMETER (RDONLY = 1) INTEGER RDWRIT PARAMETER (RDWRIT = 2) INTEGER WRONLY PARAMETER (WRONLY = 3) INTEGER APPEND PARAMETER (APPEND = 4) INTEGER NEWFIL PARAMETER (NEWFIL = 5) INTEGER TMPFIL PARAMETER (TMPFIL = 6) INTEGER NEWCPY PARAMETER (NEWCPY = 7) INTEGER NEWIMG PARAMETER (NEWIMG = 5) * * codes for data types * INTEGER TYBOOL PARAMETER (TYBOOL = 1) INTEGER TYCHAR PARAMETER (TYCHAR = 2) INTEGER TYSHOR PARAMETER (TYSHOR = 3) INTEGER TYINT PARAMETER (TYINT = 4) INTEGER TYLONG PARAMETER (TYLONG = 5) INTEGER TYREAL PARAMETER (TYREAL = 6) INTEGER TYDOUB PARAMETER (TYDOUB = 7) INTEGER TYCPLX PARAMETER (TYCPLX = 8) INTEGER TYUSHT PARAMETER (TYUSHT = 11) INTEGER TYUBYT PARAMETER (TYUBYT = 12) * * TYTEXT is a special code for the iraf77 interface; it is not in the VOS * INTEGER TYTEXT PARAMETER (TYTEXT = 13) *========================end iraf77.inc========================================= *=========================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=========================================== *------------------------------------------------------------------------------- * * read calibration table names * OBSID = ' ' CALL VGTCTP (OBSID, AARTBL, HVTBL, GNTBL, PATBL, SNTBL, : DKTBL, CVTBL, DTTBL, DKATBL, STATUS) * * read calibration tables * CALL VCALGT ( : OBSID, DKTBL, PATBL, HVTBL, SNTBL, GNTBL, : CVTBL, DTTBL, DKATBL, AARTBL, : DKDIM, PADIM, HVDIM, SNDIM, GNDIM, : CVDIM, DTDIM, DKADIM, AARDIM, : NDK, NPA, NHV, NSN, NGN, NCV, NDT, NDKAP, NAREA, : PADET, HVDET, GNDET, CVDET, DTDET, : DKAPER, SNAPER, DKAP, DKDET, DKNAME, AREAAP, : DKHV, HVHV, DTHV, GNGAIN, CVGAIN, : DKTYPE, PATYPE, HVTYPE, DTDISC, : DKBASE, PABASE, HVBASE, SNBSPT, SNBSEX, GNBASE, : CVBASE, DTBASE, AREA, : DKCOFF, PACOFF, HVCOFF, SNCOFF, GNCOFF, CVCOFF, : DTCOFF, : DKTMP0, PATMP0, HVTMP0, SNTMP0, GNTMP0, CVTMP0, : DTTMP0, : DKEP0, PAEP0, HVEP0, SNEP0, GNEP0, CVEP0, : STATUS) * * define input data table column names * CNAME(1) = 'DETECTOB' CNAME(2) = 'APERTOBJ' CNAME(3) = 'PTSRCFLG' CNAME(4) = 'VOLTAGE' CNAME(5) = 'VGAIND' CNAME(6) = 'THRESH' CNAME(7) = 'DET_TEMP' CNAME(8) = 'DEA_TEMP' CNAME(9) = 'EPOCH' INCOLS = 9 * * define output column names * CNAME(INCOLS+1) = 'DARK_D' CNAME(INCOLS+2) = 'DARK_A' CNAME(INCOLS+3) = 'PREAMP_D' CNAME(INCOLS+4) = 'PREAMP_A' CNAME(INCOLS+5) = 'HVFACT_D' CNAME(INCOLS+6) = 'HVFACT_A' CNAME(INCOLS+7) = 'SENSITIV' CNAME(INCOLS+8) = 'GAINFACT' CNAME(INCOLS+9) = 'CVCOFFST' CNAME(INCOLS+10) = 'DEADTIME' CNAME(INCOLS+11) = 'DARK_D_ERR' CNAME(INCOLS+12) = 'DARK_A_ERR' CNAME(INCOLS+13) = 'PREAMP_D_ERR' CNAME(INCOLS+14) = 'PREAMP_A_ERR' CNAME(INCOLS+15) = 'HVFACT_D_ERR' CNAME(INCOLS+16) = 'HVFACT_A_ERR' CNAME(INCOLS+17) = 'SENSITIV_ERR' CNAME(INCOLS+18) = 'GAINFACT_ERR' CNAME(INCOLS+19) = 'CVCOFFST_ERR' CNAME(INCOLS+20) = 'DEADTIME_ERR' CNAME(INCOLS+21) = 'APERAREA' * ONCOLS = 21 NCOLS = INCOLS + ONCOLS * DO 10 I = 1, ONCOLS UNIT(INCOLS+I) = ' ' COLFMT(INCOLS+I) = ' ' DTYPE(INCOLS+I) = TYREAL 10 CONTINUE * * set up input (=output) data * CALL UCLGST ('outtable', FILE, STAT(1)) CALL CDTOUT (FILE, CNAME, UNIT, COLFMT, DTYPE, NCOLS, : TP, COLIDN, NROWS, STAT(2)) DO 20 I = 1, 2 IF (STAT(I) .NE. OK) THEN STATUS = STAT(I) CONTXT = 'cannot set up input (=output) data table' GO TO 999 END IF 20 CONTINUE * * read attributes, temperatures, epoch, and point source flag from input table * DO 100 K = 1, NROWS WRITE (CHAR5, '(I5)') K * CALL UTRGTI (TP, COLIDN(1), 1, K, : DET, NULMSK(1), STAT(1)) CALL UTRGTT (TP, COLIDN(2), 1, K, : APERT, NULMSK(2), STAT(2)) CALL UTRGTT (TP, COLIDN(3), 1, K, : PTFLAG, NULMSK(3), STAT(3)) CALL UTRGTR (TP, COLIDN(4), 5, K, : COLBUF, NULMSK(4), STAT(4)) CALL UTRGTD (TP, COLIDN(9), 1, K, : EPOCH, NULMSK(9), STAT(5)) * DO 30 I = 1, INCOLS IF (NULMSK(I)) THEN CONTXT = 'VEVALP: cannot read input table row #' : // CHAR5 CALL UMSPUT (CONTXT, DEST, PRIO, STATOK) GO TO 100 END IF 30 CONTINUE * DO 35 I = 1, 5 IF (STAT(I) .NE. OK) THEN CONTXT = 'VEVALP: cannot read input table row #' : // CHAR5 CALL UMSPUT (CONTXT, DEST, PRIO, STATOK) GO TO 100 END IF 35 CONTINUE * HV = COLBUF(1) GAIN = COLBUF(2) DISCR = COLBUF(3) DETTMP = COLBUF(4) DEATMP = COLBUF(5) * * initialize output columns to zeros * DO 40 I = 1, ONCOLS COLBUF(I) = 0. 40 CONTINUE * * calculate each calibration * * * (1) dark signal * CALL VDKEVL (OBSID, DET, APERT, HV, 'DIGITAL', DETTMP, : EPOCH, DKAPER, DKHV, DKTYPE, DKBASE, DKCOFF, : DKTMP0, DKEP0, NDK, DKAP, DKDET, DKNAME, : NDKAP, COLBUF(1), STAT(1)) CALL VDKEVL (OBSID, DET, APERT, HV, 'ANALOG', DETTMP, EPOCH, : DKAPER, DKHV, DKTYPE, DKBASE, DKCOFF, DKTMP0, : DKEP0, NDK, DKAP, DKDET, DKNAME, : NDKAP, COLBUF(2), STAT(2)) * * (2) pre-amp * CALL VPAEVL (OBSID, DET, 'DIGITAL', DEATMP, EPOCH, : PADET, PATYPE, PABASE, PACOFF, PATMP0, : PAEP0, NPA, COLBUF(3), STAT(3)) CALL VPAEVL (OBSID, DET, 'ANALOG', DEATMP, EPOCH, : PADET, PATYPE, PABASE, PACOFF, PATMP0, : PAEP0, NPA, COLBUF(4), STAT(4)) * * (3) high voltage factor * CALL VHVEVL (OBSID, DET, HV, 'DIGITAL', DETTMP, EPOCH, : HVDET, HVHV, HVTYPE, HVBASE, HVCOFF, HVTMP0, : HVEP0, NHV, COLBUF(5), STAT(5)) CALL VHVEVL (OBSID, DET, HV, 'ANALOG', DETTMP, EPOCH, : HVDET, HVHV, HVTYPE, HVBASE, HVCOFF, HVTMP0, : HVEP0, NHV, COLBUF(6), STAT(6)) * * (4) cathod efficiency (relative sensitivity) * CALL VSNEVL (OBSID, APERT, PTFLAG, DETTMP, EPOCH, : SNAPER, SNBSPT, SNBSEX, SNCOFF, SNTMP0, : SNEP0, NSN, COLBUF(7), STAT(7)) * * (5) analog gain factor * CALL VGNEVL (OBSID, DET, GAIN, DEATMP, EPOCH, : GNDET, GNGAIN, GNBASE, GNCOFF, GNTMP0, : GNEP0, NGN, COLBUF(8), STAT(8)) * * (6) CVC offset * CALL VCVEVL (OBSID, DET, GAIN, DEATMP, EPOCH, : CVDET, CVGAIN, CVBASE, CVCOFF, CVTMP0, : CVEP0, NCV, COLBUF(9), STAT(9)) * * (7) dead time * CALL VDTEVL (OBSID, DET, HV, DISCR, DETTMP, : DTDET, DTHV, DTDISC, DTBASE, DTCOFF, DTTMP0, : NDT, COLBUF(10), STAT(10)) * * (8) aperture size * CALL VASIZE (OBSID, APERT, AREAAP, AREA, : NAREA, COLBUF(21), STAT(11)) * DO 50 I = 1, 11 IF (STAT(I) .NE. OK) THEN CONTXT = 'VEVALP: cannot get calibration factor(s) ' : // 'at row #' // CHAR5 CALL UMSPUT (CONTXT, DEST, PRIO, STATOK) GO TO 100 END IF 50 CONTINUE * * write calibration corrections to output table (= input table) * CALL UTRPTR (TP, COLIDN(INCOLS+1), ONCOLS, K, COLBUF, : STATUS) IF (STATUS .NE. OK) THEN CONTXT = 'VEVALP: error putting calibration corrections' : // ' at row #' // CHAR5 CALL UMSPUT (CONTXT, DEST, PRIO, STATOK) GO TO 100 END IF 100 CONTINUE * * close input/output table * CALL UTTCLO (TP, STATUS) IF (STATUS .NE. OK) THEN CONTXT = 'cannot close output table' GO TO 999 END IF * STATUS = OK GO TO 1000 * * write error message * 999 MESS = 'VEVALP: ' // CONTXT CALL UMSPUT (MESS, DEST, PRIO, STATOK) * 1000 RETURN END