

SUBROUTINE ZCCALX
C
C Module Number: 13.3.2
C
C Module Name: ZCCALX
C
C Keyphrase:
C ----------
C HRS carrousel calibration
C
C Description:
C ------------
C Using tables of dispersion coefficients (all for the same
C grating mode. The carrousel calibration coefficient, C, is
C computed for the equation:
C
C carpos = C - B*arcsin(m*wave/A)
C where:
C carpos - is the carrousel position
C m - is the spectral order (1 for first order gratings)
C wave - is the wavelength at the center of the photocathode,
C (i.e. sample position 280)
C B = 10430.378 (carrousel steps per radian)
C A is a constant for each grating
C C is a coeficient updated by the routine
C
C The input dispersion coefficients are used to compute the
C central wavelength at sample position 280.0 at each carrousel
C position observed. Using the previous car6rousel calibration
C coefficients in CCTABIN an effective carrousel position is computed
C using each wavelength computed from the dispersion coefficients.
C The average of the difference from the computed and actual
C carrousels is used as an offset to the input value of the
C coefficient C.
C
C
C FORTRAN Name: ZCCALX.FOR
C
C
C Keywords of Accessed Files :
C --------------------------
C cctabin input carrousel calibration to update (Optional)
C dctab input Dispersion coef. table
C cctabout output updated carrousel calibration table
C
C Modules Called:
C ---------------
C CDBS:
C zccfit, zwcomp
C SDAS:
* uclgs* , umsput
* uttinn, utppti, utcdef, utrpt*, utcpt*, uthad*, uttclo, utccre
* uttopn, utpgti, utcfnd, utrgt*, utcgt*, uthgt*, uttclo
* uimotp, uimxtp, uimctp, uimopn, uimgid, uimclo, uhdgs* uimclo
C History:
C --------
C Version Date Author Description
C 1 Oct. 86 D.Lindler Designed and coded
C 2 dec 87 D. Lindler New sdas i/o and standards
* 2.1 Jan 92 S. Hulbert New grating values
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 ERROR PROCESSING PARAMETERS
C
INTEGER STATUS,ISTAT,ISTATS(10)
CHARACTER*130 CONTXT
C --->WHAT HAPPENED
C
C INPUT DC TABLE INFO
C
CHARACTER*130 NAME
INTEGER IDIN
CHARACTER*8 COLNAM(9)
INTEGER NROWS,COLIDS(9)
LOGICAL NULLS(9)
C
C INPUT/OUTPUT CAR. CALIBRATIN TABLE
C
CHARACTER*64 CCTABI,CCTABO
INTEGER IDOUT
CHARACTER*8 COL1(8),CFORM(8),CUNITS(8)
INTEGER CTYPE(8)
DOUBLE PRECISION COEF(7)
C
C LOCAL VARIABLES
C
INTEGER IROW
C --->ROW COUNTER
LOGICAL FIRST
C ---> FIRST SET OF DC'S
INTEGER I
C --->INDEX
INTEGER NPOS
C --->NUMBER OF CAR. POSITIONS
CHARACTER*5 GRAT1,GRAT
C --->GRATING MODE
DOUBLE PRECISION DC(8,100)
C
C DATA DECLARATIONS
C
DATA COLNAM/'GRATING','CARPOS','A0','A1','A2','A3',
* 'A4','A5','A6'/
DATA COL1/'GRATING','CAP_A','LIT_A','CAP_B','LIT_B','CAP_C',
* 'LIT_C','LIT_D'/
DATA CFORM/8*' '/
DATA CUNITS/8*' '/
DATA CTYPE/-3,7*TYDOUB/
C --->DISPERSION COEFFICIENTS
C
C --------------------------------------------------------------------
C
C GET CL PARAMETERS
C
CALL UCLGST('dctab',NAME,ISTATS(1))
CALL UCLGST('cctabin',CCTABI,ISTATS(2))
CALL UCLGST('cctabout',CCTABO,ISTATS(3))
DO 10 I=1,3
IF(ISTATS(I).NE.0)THEN
CONTXT='Error reading input cl parameter'
GO TO 999
ENDIF
10 CONTINUE
C
C READ INPUT DCTAB TABLE ------------------------------------------------
C
NPOS=0
C --->NUMBER OF SETS OF DISP. CONSTANTS READ
FIRST=.TRUE.
C --->FIRST SET?
C
C OPEN TABLE FILE
C
CALL UTTOPN(NAME,RDONLY,IDIN,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error opening input dctab '//NAME
GO TO 999
ENDIF
CALL UTPGTI(IDIN,TBNROW,NROWS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error reading input dctab '//NAME
GO TO 999
ENDIF
IF(NROWS.EQ.0)THEN
CONTXT='Input dctab has no rows'
GO TO 999
ENDIF
CALL UTCFND(IDIN,COLNAM,9,COLIDS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error locating correct columns in dctab '//NAME
GO TO 999
ENDIF
C
C LOOP ON ROWS OF THE TABLE
C
DO 50 IROW=1,NROWS
NPOS=NPOS+1
IF(NPOS.GT.100)THEN
CONTXT='Error: max. of 100 carrousel '//
* 'allowed'
GO TO 999
ENDIF
CALL UTRGTT(IDIN,COLIDS(1),1,IROW,GRAT,NULLS,ISTATS(1))
CALL UTRGTD(IDIN,COLIDS(2),8,IROW,DC(1,NPOS),NULLS,
* ISTATS(2))
DO 30 I=1,2
IF(ISTATS(I).NE.0)THEN
CONTXT='Error reading input dctab '//NAME
GO TO 999
ENDIF
30 CONTINUE
C
C CHECK CONSISTENCY
C
IF(FIRST)THEN
GRAT1=GRAT
FIRST=.FALSE.
ELSE
IF(GRAT.NE.GRAT1)THEN
CONTXT='All dctabs must be same grating'
GO TO 999
ENDIF
ENDIF
50 CONTINUE
CALL UTTCLO(IDIN,ISTAT)
C
C DONE READING INPUT DCTABS ------------------------------------------------
C
C
C READ PREVIOUS CARROUSEL CALIBRATION TABLE
C
CALL UTTOPN(CCTABI,RDONLY,IDIN,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error opening input table '//CCTABI
GO TO 999
ENDIF
CALL UTPGTI(IDIN,TBNROW,NROWS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error reading input table '//CCTABI
GO TO 999
ENDIF
CALL UTCFND(IDIN,COL1,8,COLIDS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error locating correct columns in '//
* CCTABI
GO TO 999
ENDIF
C
C LOOP ON ROWS TO FIND CORRECT GRATING MODE
C
DO 80 IROW=1,NROWS
CALL UTRGTT(IDIN,COLIDS(1),1,IROW,GRAT,NULLS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error reading input table '//CCTABI
GO TO 999
ENDIF
IF(GRAT.EQ.GRAT1)GO TO 90
80 CONTINUE
C
C IF WE MADE IT HERE THEN WE DID NOT FIND CORRECT GRATING MODE
C
CONTXT='Grating mode was not found in input cctab '//
* CCTABI
GO TO 999
C
C READ COEFFICIENTS
C
90 CALL UTRGTD(IDIN,COLIDS(2),7,IROW,COEF,NULLS,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error reading input table '//CCTABI
GO TO 999
ENDIF
CALL UTTCLO(IDIN,ISTAT)
C
C COMPUTE NEW COEFFICIENTS FOR OUTPUT TABLE ---------------------------
C
CALL ZCCFIT(NPOS,DC,GRAT1,COEF,STATUS)
IF(STATUS.NE.0)THEN
CONTXT='ERROR COMPUTING NEW COEFFICIENTS'
GO TO 999
ENDIF
C
C WRITE OUTPUT TABLE ----------------------------------------------------
C
C
C OPEN OUTPUT TABLE
C
CALL UTTINN(CCTABO,IDOUT,ISTATS(1))
CALL UTPPTI(IDOUT,TBRLEN,15,ISTATS(2))
CALL UTPPTI(IDOUT,TBMXCL,8,ISTATS(3))
CALL UTCDEF(IDOUT,COL1,CUNITS,CFORM,CTYPE,8,COLIDS,ISTATS(4))
CALL UTTCRE(IDOUT,ISTATS(5))
DO 200 I=1,5
IF(ISTATS(I).NE.0)THEN
CONTXT='Error creating output table '//CCTABO
GO TO 999
ENDIF
200 CONTINUE
C
C COPY RESULTS TO TABLE
C
CALL UTRPTT(IDOUT,COLIDS(1),1,1,GRAT1,ISTATS(1))
CALL UTRPTD(IDOUT,COLIDS(2),7,1,COEF,ISTATS(2))
DO 210 I=1,2
IF(ISTATS(I).NE.0)THEN
CONTXT='Error writing to output table'
GO TO 999
ENDIF
210 CONTINUE
CALL UTTCLO(IDOUT,ISTAT)
IF(ISTAT.NE.0)THEN
CONTXT='Error closing output table '//CCTABO
GO TO 999
ENDIF
C
C DONE
C
GO TO 1000
999 CALL UMSPUT(CONTXT,STDOUT+STDERR,0,ISTAT)
1000 RETURN
END
Source Code · Search Form · STSDAS
Maintained by the Science Software Group at STScI
This file last updated on 24 Feb 2011