>  Docs Center  >  Libraries  >  Buie  >  FIXSNAP
Libraries

FIXSNAP

FIXSNAP

Name


  fixsnap

Purpose


  Munge a SNAPSHOT format ``FITS'' header and make it legal FITS

Description


  This fixes a known epoch of SNAPSHOT headers to valid FITS. The keyword
    list and what to do with them is hardcoded here. If you get no printed
    messages to the screen, then the header was successfully processed.

Category


  CCD data processing

Calling Sequence


  fixsnap,badhdr,goodhdr

Inputs


  badhdr - string array containing what should be a FITS header

Optional Input Parameters


Keyword Input Parameters


Outputs


  goodhdr - Modified version of badhdr that fixes up the illegal stuff.

Keyword Output Parameters


Common Blocks


Side Effects


Restrictions


Procedure


Modification History


  96/07/02 - Written by Marc W. Buie, Lowell Observatory
ro fixsnap,in_badhdr,goodhdr
  if badpar(in_badhdr,7,1,CALLER='FIXSNAP: (badhdr) ') then return
  badhdr = in_badhdr
  if strmid(badhdr[0],0,8) ne 'SIMPLE ' then $
    message,'Header does not start with SIMPLE'
  instrument = sxpar(badhdr,'INSTRUME')
  if instrument ne 'SNAPSHOT' then $
    message,'Instrument is not SNAPSHOT, header not processed'
  badhdr=repchar(badhdr,'"',"'")
  badhdr=repchar(badhdr,'= 36''','= 36"')
  badhdr=repchar(badhdr,'= 72''','= 72"')
  goodhdr = strarr(n_elements(badhdr))
  fixed = intarr(n_elements(badhdr))
  blanks=' '
  goodhdr[0]='SIMPLE = T / SNAPSHOT header converted by FIXSNAP(IDL)'
  goodhdr[0]=strmid(goodhdr[0]+blanks,0,80)
  fixed[0] = 1
  type1=['BITPIX','NAXIS','NAXIS1','NAXIS2','NAXIS3','NUMSUBF','SUBFNUM', $
        'BZERO','BSCALE','O_BSCALE','CRPIX1','CFINT1','CRPIX2','CFINT2', $
        'DETAXIS1','DETAXIS2']
  type2=['CTYPE','CCD','FILETYPE','FLTPVERS','VERSAUTH','BUNIT','CUNIT1', $
        'CUNIT2','CUNIT3','CLABL3','STRTTIME','PARMTIME','OBSERVAT', $
        'TELESCOP','INSTRUME','OBSERVER']
  type3=['VERSDATE','CLABL1','ORIGFILE','OPTICSL','OPTICSR','OBJECT', $
        'ORIGIN','ZONE-OBS','DATE-OBS','CDSCR1','CLABL2','CDSCR2', $
        'CDSCR3']
  type4=['SEQUENCE','SHUTTER','SETHEAT','NUMDOTS','NSHIFT','SFBIN', $
        'CDELT2','CRVAL2','CDELT3','CRVAL3','CFINT3','TEMP','SETTEMP', $
        'PFBIN','SEQ-PRGM','HEATER','FOCUSR','FOCUSL','FILTERR','FILTERL', $
        'CDELT1','CRVAL1','AUTOGUID']
  type5=['OBJ-RA','OBJ-DEC','LAT-TEL','LAT-TYPE','LONG-TEL','LOGIN1', $
        'COMP1','PTHNM1','PRGRM1','TIME1','DATE1','LICK']
  type6=['CRPIX3','ALT-TEL','TAPENUM']
  type7=['COMMENT','REMARK']
  blanks=' '
  for i=1,n_elements(badhdr)-1 do begin
    key = strtrim(strmid(badhdr[i],0,8),2)
    if key eq '' then begin
        goodhdr[i]=strmid(blanks,0,80)
        fixed[i]=1
    endif else if key eq 'END' then begin
        goodhdr[i]=strmid('END'+blanks,0,80)
        fixed[i]=1
    endif else begin
        ; Look for TYPE1 keywords, numeric values that are left justified.
        ; To fix this type, look for the / character. Look backward to
        ; the first non-blank character. Save that character back to the
        ; next blank, this is the value. Output this value right justified
        ; in column 30
        keyloc = where(key eq type1)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = strtrim(strmid(badhdr[i],9,slashpos-9),2)
          goodhdr[i]=string(strmid(key+' ',0,8),value,tag, $
                                format='(a,"=",a21,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE2 keywords. These are actually string values that
        ; have no ' delimiters. These must be added and left in the
        ; header left justified.
        keyloc = where(key eq type2)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = strtrim(strmid(badhdr[i],9,slashpos-9),2)
          if strlen(value) lt 8 then value=strmid(value+blanks,0,8)
          goodhdr[i]=string(strmid(key+blanks,0,8), $
                            strmid("'"+value+"'"+blanks,0,20),tag, $
                                format='(a,"=",a21,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE3 keywords. These are string values that are quote
        ; delimited but may not be long enough and the tag needs to be
        ; repositioned with possible truncation.
        keyloc = where(key eq type3)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = strtrim(strmid(badhdr[i],9,slashpos-9),2)
          value = strtrim(strmid(value,1,strlen(value)-2),2)
          if strlen(value) lt 8 then value=strmid(value+blanks,0,8)
          if strlen(value) lt 18 then $
              goodhdr[i]=string(strmid(key+blanks,0,8), $
                                strmid("'"+value+"'"+blanks,0,20),tag, $
                                  format='(a,"=",a21,1x,a)') $
          else $
              goodhdr[i]=string(strmid(key+blanks,0,8), $
                                " '"+value+"'",strmid(tag,0,49-strlen(value)+21), $
                                  format='(a,"=",a,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE4 keywords. These are string values that are quote
        ; delimited but are really numeric values. The tag needs to be
        ; repositioned with possible truncation.
        keyloc = where(key eq type4)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = strtrim(strmid(badhdr[i],9,slashpos-9),2)
          value = strtrim(strmid(value,1,strlen(value)-2),2)
          goodhdr[i]=string(strmid(key+' ',0,8),value,tag, $
                                format='(a,"=",a21,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE5 keywords. These are values that might be strings
        ; but have no value. Add an empty string and repositioned the tag.
        keyloc = where(key eq type5)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = ' '
          goodhdr[i]=string(strmid(key+' ',0,8), $
                                strmid("'"+value+"'"+blanks,0,20),tag, $
                                format='(a,"=",a21,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE6 keywords, might be numeric values but are left
        ; empty. Set to 0 and modify tag.
        keyloc = where(key eq type6)
        if keyloc[0] ne -1 then begin
          slashpos = rstrpos(badhdr[i],'/')
          tag = strtrim(strmid(badhdr[i],slashpos,49),2)
          value = '0'
          goodhdr[i]=string(strmid(key+' ',0,8),value,tag, $
                                format='(a,"=",a21,1x,a)')
          fixed[i]=1
        endif
        ; Look for TYPE7 keywords, no chnage.
        keyloc = where(key eq type7)
        if keyloc[0] ne -1 then begin
          goodhdr[i]=badhdr[i]
          fixed[i]=1
        endif
        if not fixed[i] then begin
          goodhdr[i]='HISTORY bad header line, keyword '+key
          print,'bad ',strtrim(badhdr[i],2)
        endif else begin
          if strlen(goodhdr[i]) gt 80 then $
              print,'Long line! key=',key,' length=',strlen(goodhdr[i]) $
          else $
              goodhdr[i]=strmid(goodhdr[i]+blanks,0,80)
        endelse
       
    endelse
  endfor
  if n_elements(badhdr) ne fix(total(fixed)) then $
    print,'Header length ',n_elements(badhdr),' ', $
        n_elements(badhdr)-fix(total(fixed)),' not fixed'
nd



© 2024 NV5 Geospatial Solutions, Inc. |  Legal
   Contact Us