SUBROUTINE ZLCOEF(DET,NUP,YDEFUP,TOTUP, * NLOW,YDEFLW,TOTLOW,COEF,STATUS) C C Module Number: 13.8.2 C C Module Name: ZLCOEF C C Keyphrase: C ---------- C Compute the line mapping function coef. for routine zmplcl C C Description: C ------------ C Using tables of counts versus ydeflection the coefficients for the C line mapping function are computted by: C A = 430/(YPOSLW-yposup) C L0 = (2048-yposup)*A C where: YPOSLW and yposup are the deflections needed to center C the diode array on the lower and upper edges C C FORTRAN Name: zlcoef.for C C C Keywords of Accessed Files : C -------------------------- C NONE C C Modules Called: C --------------- C CDBS: C zledge, ZPKSR2 C SDAS: C usmput C C History: C -------- C Version Date Author Description C 1.0 10/mar/86 D. Lindler Designed and coded C 2.0 DEC 87 D. LINDLER NEW SDAS IO/STANDARDS C------------------------------------------------------------------------ C INCLUDE FILE FOR THE IRAF77 FORTRAN INTERFACE TO THE IRAF VOS C C C FILE I/O ACCESS MODES C INTEGER RDONLY PARAMETER (RDONLY = 1) INTEGER RDWRIT PARAMETER (RDWRIT = 2) INTEGER WRONLY PARAMETER (WRONLY = 3) INTEGER APPEND PARAMETER (APPEND = 4) C C CODES FOR DATA TYPES C INTEGER TYBOOL PARAMETER (TYBOOL = 1) INTEGER TYCHAR PARAMETER (TYCHAR = 2) INTEGER TYINT PARAMETER (TYINT = 4) INTEGER TYREAL PARAMETER (TYREAL = 6) INTEGER TYDOUB PARAMETER (TYDOUB = 7) C C UMSPUT DESTINATIONS -- CB, DAO, 4-SEP-87 C INTEGER STDOUT PARAMETER (STDOUT = 1) INTEGER STDERR PARAMETER (STDERR = 2) C C UHDAS HEADER PARM TYPES -- CB, DAO, 5-SEP-87 C INTEGER GENHDR PARAMETER (GENHDR = 0) INTEGER IMSPEC PARAMETER (IMSPEC = 1) C C THIS SECTION IS FOR PARAMETERS RELEVANT TO TABLE I/O. C C THESE MAY BE SET BY UTPPTI AND/OR READ BY UTPGTI: C C LENGTH OF ROW (UNIT = SIZE OF REAL) INTEGER TBRLEN PARAMETER (TBRLEN = 1) C INCREASE ROW LENGTH INTEGER TBIRLN PARAMETER (TBIRLN = 2) C NUMBER OF ROWS TO ALLOCATE INTEGER TBALLR PARAMETER (TBALLR = 3) C INCREASE ALLOC NUM OF ROWS INTEGER TBIALR PARAMETER (TBIALR = 4) C WHICH TYPE OF TABLE? (ROW OR COLUMN) INTEGER TBWTYP PARAMETER (TBWTYP = 5) C MAXIMUM NUMBER OF USER PARAMETERS INTEGER TBMXPR PARAMETER (TBMXPR = 6) C MAXIMUM NUMBER OF COLUMNS INTEGER TBMXCL PARAMETER (TBMXCL = 7) C TYPE = ROW-ORDERED TABLE INTEGER TBTYPR PARAMETER (TBTYPR = 11) C TYPE = COLUMN-ORDERED TABLE INTEGER TBTYPC PARAMETER (TBTYPC = 12) C C THESE MAY BE READ BY UTPGTI BUT MAY NOT BE SET: C C NUMBER OF ROWS WRITTEN TO INTEGER TBNROW PARAMETER (TBNROW = 21) C C END IRAF77.INC C C INPUT: C INTEGER DET C ---> HRS DETECTOR NUMBER (1 OR 2) INTEGER NUP C ---> NUMBER OF POINTS (UPPER EDGE) DOUBLE PRECISION YDEFUP(1) C ---> TABLE OF YDEF. UPPER EDGE DOUBLE PRECISION TOTUP(1) C ---> TABLE OF COUNTS, UPPER EDGE INTEGER NLOW C ---> NUMBER OF POINTS (LOWER EDGE) DOUBLE PRECISION YDEFLW(1) C ---> Y-DEFLECTIONS (LOWER EDGE) DOUBLE PRECISION TOTLOW(1) C ---> COUNTS (LOWER EDGE) C C OUTPUT: C DOUBLE PRECISION COEF(5) C ---> COEFFICIENT ARRAY INTEGER STATUS C ---> STATUS C C LOCAL VARIABLES C CHARACTER*130 MESS C ---> MESS FOR TERMINAL CHARACTER*130 CONTXT C ---> WHAT HAPPENED DOUBLE PRECISION YPOSUP,YPOSLW C ---> EDGE LOCATIONS DOUBLE PRECISION L0,A C ---> MAPPING COEFFICIENTS INTEGER ISTAT C---------------------------------------------------------------------- C C DO WE HAVE ENOUGH DATA ON EACH EDGE? C IF((NUP.LT.4).OR.(NLOW.LT.4)) THEN CONTXT='INSUFFICIENT OBSERVATIONS OF UPPER OR LOWER EDGE' GO TO 999 ENDIF C C SORT TABLES IN ORDER OF ASCENDING Y-DEFLECTION C CALL ZPKSR2(NUP,YDEFUP,TOTUP) CALL ZPKSR2(NLOW,YDEFLW,TOTLOW) C C LOCATED EDGE POSITIONS C CALL ZLEDGE(NUP,YDEFUP,TOTUP,YPOSUP,STATUS) IF (STATUS.NE.0) THEN CONTXT='UPPER EDGE NOT FOUND' GO TO 999 ENDIF WRITE(MESS,99)YPOSUP 99 FORMAT(1X,'UPPER EDGE LOCATION =',F8.2) CALL UMSPUT(MESS,STDOUT,0,ISTAT) CALL ZLEDGE(NLOW,YDEFLW,TOTLOW,YPOSLW,STATUS) IF (STATUS.NE.0) THEN CONTXT='LOWER EDGE NOT FOUND' GO TO 999 ENDIF WRITE(MESS,199)YPOSLW 199 FORMAT(1X,'LOWER EDGE LOCATION =',F8.2) CALL UMSPUT(MESS,STDOUT,0,ISTAT) C C COMPUTE COEFFICIENTS C A=430.0/(YPOSLW-YPOSUP) L0=(2048-YPOSUP)*A WRITE(MESS,299)DET,L0,A 299 FORMAT(1X,'COEF. FOR DETECTOR',I2,' L0=',F8.2,' A=',F8.5) CALL UMSPUT(MESS,STDOUT,0,ISTAT) C FOR CONSISTENCY WITH SAMPLE COEF. COEF(1)=L0 COEF(2)=0.0 C ---> NOT IMPLEMENTED (ERROR IN L0) COEF(3)=A COEF(4)=0.0 C ---> NOT IMPLEMENTED (ERROR IN A) STATUS=0 GO TO 1000 C C ERROR ENCOUNTERED C 999 STATUS=1 C C LET'S GET OUT OF HERE C 1000 CALL UMSPUT(CONTXT,STDOUT+STDERR,0,ISTAT) RETURN END