;+ ; Project : SOHO - EIT ; ; Name : ; EIT_FXPAR ; Purpose : ; Obtain the value of a parameter in a FITS header. ; Explanation : This is a shell around the IDLASTRO routine FXPAR. ; The procedure can parse for keywords embedded into ; comments. Usageis identical to FXPAR. ; Use : ; Result = EIT_FXPAR( HDR, NAME [, ABORT ] [,IMAGE_NO=IMAGE_NO] ) ; ; e.g. IDL> hdr=headfits('efr19960715.123746') ; IDL> print,eit_fxpar(hdr,'EXPTIME') ; 7.000 ; IDL> print,eit_fxpar(hdr,'N_MISSING_BLOCKS') ; 4 ; IDL> hdr=headfits('efz19960623.132832') ; IDL> print,eit_fxpar(hdr,'FLTR',image_no=23) ; Al + 1 ; ; Inputs : ; HDR = FITS header string array (e.g. as returned by FXREAD). Each ; element should have a length of 80 characters ; Optionaly, this can be an IDL structure CREATED from a ; FITs header as by read_eit ; NAME = String name of the parameter to return. If NAME is of the ; form 'keyword*' then an array is returned containing values ; of keywordN where N is an integer. The value of keywordN ; will be placed in RESULT(N-1). The data type of RESULT will ; be the type of the first valid match of keywordN found. ; If keyword is in COMMENT field will return keyval. ; Opt. Inputs : ; ABORT = String to output if can not return value ; IMAGE_NO = Image number for files containing multiple subimages, ; set to 'ALL' to return values for all subimages ; ; Outputs : ; The returned value of the function is the value(s) associated with the ; requested keyword in the header array. ; ; Keywords : ; COUNT = Optional keyword to return a value equal to the number of ; parameters found by FXPAR. ; COMMENTS= Array of comments associated with the returned values. ; INITIALIZE = Used by read_eit only, parse comments for 3D index ; structures, else pull out of tag value ; CAT_WAVES = return all wavelngths in catalog structure, else ; returns first wavelength ; Calls : ; Common : ; None. ; Restrictions: ; None. ; Side effects: ; Category : ; Data Handling, I/O, FITS, Generic. ; Written : 1996 July 15, J. Newmark ; Modified : 1996 Aug 23 J. Newmark allow input if IDL structure (or ; array of structures) created from FITS headers. ; 1996 Oct 18. J. Newmark - allow use of Single image keywords ; for multiple image LZ files, return scalar for 3D keywords ; if 1 element array. ; ; 1996 Nov 5, S.L. Freeland - force 'have_sub' to scalar value ; 1996 Dec 27 J. Newmark - fixed index structure input. ; Version : 1.2 ; 1997 Jan 14 J. Newmark - added capability to handle ; raw catalog structure input, add /initialize keyword ; cat_waves keyword ; Version : 2.0 ; 1997 Jan 24 J. Newmark - changed many if-thens to CASE ; 1997 Mar 20 J. Newmark - add in sci_obj field for catalog ; 1997 Apr 14 J. Newmark - add support for second ASCII table ; 1997 Aug 12 J. Newmark - return INT/FLT where expected, 3D ; 1998 Mar 26 J. Newmark - add corrected date_obs field ; 1998 Oct 23 J. Newmark - add n_repeat field for raw catalog ;- ;------------------------------------------------------------------------------ ; ; FUNCTION EIT_FXPAR, HDR, NAME, ABORT, COUNT=COUNT, COMMENT=COMMENTS,$ IMAGE_NO=IMAGE_NO,CAT_WAVES=CAT_WAVES, INITIALIZE=INITIALIZE name=STRUPCASE(name) IF datatype(hdr) EQ 'STC' THEN is_stc=1 ELSE is_stc=0 ; work on EIT catalog raw structures, i.e. not a FITS structure if is_stc then if not tag_exist(hdr,'simple') then begin CASE name of 'WAVELNTH': BEGIN result = fix(hdr.wave(0)) + 170 cat_waves = fix(hdr.wave) keep = where(cat_waves ne 0, nwaves) if nwaves gt 0 then cat_waves(keep) = cat_waves(keep) + 170 END 'FILTER': BEGIN filt_str = ['AL+1', 'BLK EST', 'CLEAR', 'BLK WST', 'AL+2' ] result = filt_str(hdr.filter) END 'OBJECT': BEGIN obj_str = ['PARTIAL FOV','FULL FOV','DARK', 'CAL LAMP'] result = obj_str(hdr.object) END 'NAXIS': BEGIN result = hdr.n_repeat result = result > 2 END 'NAXIS1': result = hdr.nx * 32 'NAXIS2': result = hdr.ny * 32 'XBIN': result = hdr.nx_sum 'YBIN': result = hdr.ny_sum 'EXPTIME': result = hdr.exp_time 'DATE_OBS': BEGIN times = {mjd:hdr.obs_time.mjd+49718, time:hdr.obs_time.sec*1000L} result = anytim2utc(utc2tai(times),/ccsds) END 'P1_X': result = hdr.low_x 'P2_X': result = hdr.high_x 'P1_Y': result = hdr.low_y 'P2_Y': result = hdr.high_y 'CFTEMP': result = hdr.temp(0) 'CCDTEMP': result = hdr.temp(1) 'FILENAME': result = string(hdr.file_name) 'SCI_OBJ': result = string(hdr.sci_obj) 'N_REPEAT': result = string(hdr.n_repeat) ELSE: result = 0 ENDCASE IF N_ELEMENTS(result) EQ 1 THEN result=result(0) return,result endif subimage_desc=['START_TIME','EXP_TIME','WAV','FLTR','N_MB','IMAGE',$ '3D_PROG','3D_DATE','CF_TEMP','CCD_TEMP','CORR START_TIME'] sub_sep = [0,24,32,36,42,50,54,70,24,33,42,65] ; ; 1996 Oct 18 -JSN - add checks if 3-D LZ file allow for alternate names ; if not is_stc then begin have_sub = fxpar(hdr,'NAXIS') use_com = 1 endif else begin have_sub = hdr.naxis use_com = keyword_set(initialize) endelse atable = 0 if have_sub(0) eq 3 and use_com then begin hist = fxpar(hdr,'history') version = float(strmid(hist(0),8,3)) CASE name of 'WAVELNTH': name = 'WAV' 'FILTER': name = 'FLTR' 'EXPTIME': name = 'EXP_TIME' 'DATE_OBS': name = '3D_DATE' 'OBS_PROG': name = '3D_PROG' 'N_MISSING_BLOCKS': name = 'N_MB' ; 'CFTEMP': if version ge 2 then begin name = 'CF_TEMP' atable = 1 end 'CCDTEMP': if version ge 2 then begin name = 'CCD_TEMP' atable = 1 end 'CF_TEMP': atable = 1 'CCD_TEMP': atable = 1 'CORRECTED DATE_OBS': if version ge 2 then begin name = 'CORR START_TIME' atable = 1 end 'CORR START_TIME': atable = 1 ELSE: ENDCASE endif ; yes_sub=where(strpos(subimage_desc,name) ne -1) IF yes_sub(0) ne -1 THEN BEGIN if have_sub(0) ne 3 then begin print,'File does not contain subfield images, i.e. NAXIS=2' return,0 endif else if not is_stc then num_images=fxpar(hdr,'NAXIS3') else begin if tag_exist(hdr,'NAXIS3') then num_images=hdr(0).naxis3 else $ num_images=0 endelse if n_elements(image_no) eq 0 then begin print,'Information requested for image number (0 - ',$ strtrim(num_images-1,2),')?' read,prompt='Enter image number:',image_no endif if not is_stc then comms=fxpar(hdr,'COMMENT') else comms=hdr(0).comment start=where(strpos(comms,'START_TIME') ne -1) if strlowcase(image_no) eq 'all' then subinfo=comms(start(atable)+1:$ start(atable)+num_images) else $ subinfo=comms(start(atable)+1+image_no) CASE name OF '3D_DATE': begin yes_sub(0) = 0 d_flag = 1 end 'CORR START_TIME': d_flag = 1 ELSE: d_flag = 0 ENDCASE sub=sub_sep(yes_sub(0)) result=strmid(subinfo,sub,sub_sep(yes_sub(0)+1)-sub) if d_flag then result = anytim2utc(result,/ccsds) ; ; jsn 12-aug-1996 if name eq 'WAV' or name eq 'N_MB' then result = fix(result) if name eq 'EXP_TIME' or name eq 'CF_TEMP' then result = float(result) IF N_ELEMENTS(result) EQ 1 THEN result=result(0) return,result ENDIF IF NOT is_stc THEN BEGIN IF N_ELEMENTS(abort) EQ 0 THEN $ result=fxpar(hdr,name,count=count,comment=comments) ELSE $ result=fxpar(hdr,name,abort,count=count,comment=comments) ENDIF ELSE BEGIN result = gt_tagval(hdr,name,found=count) if count eq -1 then count = 0 ENDELSE IF count EQ 0 THEN BEGIN IF NOT is_stc THEN result2=fxpar(hdr,'COMMENT') ELSE result2=hdr.comment line=WHERE(STRPOS(result2,name) EQ 0,count) IF count EQ 0 THEN RETURN,result out=result2(line) result=STRMID(out,STRPOS(out(0),'=')+1,80) sg=STRPOS(result(0),"'") Case 1 of name EQ 'CORRECTED DATE_OBS': if sg eq 1 then result = $ strmid(result,2,strlen(result(0))-3) else result = strtrim(result,2) name EQ 'SHUTTER CLOSE TIME': result = float(result) name EQ 'COMMANDED EXPOSURE TIME': result = float(result) sg eq -1: result = fix(result) sg eq 1 : result = strmid(result,2,strlen(result(0))-3) ENDCASE IF N_ELEMENTS(result) EQ 1 THEN result=result(0) ENDIF RETURN,result END
Last revised: - Wed May 9 21:45:17 2007- F. Auchère