SUBROUTINE ZLEDGE(N,YDEF,TOT,YPOS,STATUS) C C C Module Number: 13.8.2 C C Module Name: ZLEDGE C C Keyphrase: C ---------- C Locate yposition of upper or lower HRS photocathode mask edge C C Description: C ------------ C Using an edge profile the location of the upper or lower photocathode C mask edge is located at the point where the counts equals 1/2 the C maximum + minimum counts. C C FORTRAN Name: zledge.for C C C Keywords of Accessed Files : C -------------------------- C NONE C C Modules Called: C --------------- C SDAS: C UMSPUT 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 i/o and 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 N C ---> NUMBER OF EDGE OBSERVATIONS DOUBLE PRECISION YDEF(1) C ---> Y-DEFLECTIONS OF THE OBS. DOUBLE PRECISION TOT(1) C ---> TOTAL COUNTS AT EACH Y-DEF C C OUTPUT: C DOUBLE PRECISION YPOS C ---> Y-DEFLECTION OF EDGE INTEGER STATUS C ---> STATUS C C LOCAL VARIABLES C DOUBLE PRECISION MINTOT,MAXTOT C ---> MIN AND MAX OF TOT DOUBLE PRECISION HTOT C ---> 1/2 (MIN AND MAX OF TOT) INTEGER I C ---> INDEX LOGICAL UPPER C ---> UPPER EDGE? CHARACTER*130 CONTXT C ---> WHAT HAPPENED INTEGER ISTAT C C----------------------------------------------------------------------- C C DETERMINE MIN AND MAX OF TOT C MINTOT=1.0E10 MAXTOT=0.0 DO 1 I=1,N IF(TOT(I).GT.MAXTOT) MAXTOT=TOT(I) IF(TOT(I).LT.MINTOT) MINTOT=TOT(I) 1 CONTINUE HTOT = (MINTOT+MAXTOT)/2.0 IF(MINTOT.EQ.MAXTOT) THEN CONTXT='MIN AND MAX OF EDGE PROFILE IDENTICLE' STATUS=1 GO TO 999 ENDIF C C DECIDE IF UPPER OR LOWER EDGE C UPPER=.TRUE. IF(YDEF(1).GT.2048) UPPER=.FALSE. C C FIND TWO POINTS HTOT LIES BETWEEN C DO 2 I=1,N-1 IF(UPPER)THEN IF(TOT(I+1).GT.HTOT) GO TO 10 ELSE IF(TOT(I+1).LT.HTOT) GO TO 10 ENDIF 2 CONTINUE C C INTERPOLATED TO COMPUTE POSITION C 10 YPOS=YDEF(I) + (HTOT-TOT(I))*(YDEF(I+1)-YDEF(I))/ * (TOT(I+1)-TOT(I)) STATUS=0 C C DONE C GO TO 1000 999 CALL UMSPUT(CONTXT,STDOUT+STDERR,0,ISTAT) 1000 RETURN END