⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftput.pro

📁 basic median filter simulation
💻 PRO
字号:
pro ftput,h,tab,field,row,values,nulls;+; NAME:;       FTPUT; PURPOSE:;       Procedure to add or update a field in an FITS ASCII table; CALLING SEQUENCE:;       FTPUT, htab, tab, field, row, values, [ nulls ];; INPUTS:;       htab - FITS ASCII table header string array;       tab - FITS ASCII table array (e.g. as read by READFITS);       field - string field name or integer field number;       row -  either a non-negative integer scalar giving starting row to ;               update, or a non-negative integer vector specifying rows to ;               update.   FTPUT will append a new row to a table if the value ;               of 'row' exceeds the number of rows in the tab array    ;       values - value(s) to add or update.   If row is a vector;               then values must contain the same number of elements.;; OPTIONAL INPUT:;       nulls - null value flag of same length as values.;               It should be set to 1 at null value positions;               and 0 elsewhere.;; OUTPUTS:;       htab,tab will be updated as specified.;; EXAMPLE:;       One has a NAME and RA  and Dec vectors for 500 stars with formats A6,;       F9.5 and F9.5 respectively.   Write this information to an ASCII table ;       named 'star.fits'.;;       IDL> FTCREATE,24,500,h,tab       ;Create table header and (empty) data;       IDL> FTADDCOL,h,tab,'RA',8,'F9.5','DEGREES'   ;Explicity define the;       IDL> FTADDCOL,h,tab,'DEC',8,'F9.5','DEGREES'  ;RA and Dec columns;       IDL> FTPUT,h,tab,'RA',0,ra       ;Insert RA vector into table;       IDL> FTPUT,h,tab,'DEC',0,dec       ;Insert DEC vector into table;       IDL> FTPUT, h,tab, 'NAME',0,name   ;Insert NAME vector with default;       IDL> WRITEFITS,'stars.fits',tab,h ;Write to a file;   ;      Note that (1) explicit formatting has been supplied for the (numeric);      RA and Dec vectors, but was not needed for the NAME vector, (2) A width;      of 24 was supplied in FTCREATE based on the expected formats (6+9+9),;      though the FT* will adjust this value as necessary, and (3) WRITEFITS;      will create a minimal primary header  ; NOTES:;       (1) If the specified field is not already in the table, then FTPUT will;       create a new column for that field using default formatting.   However,;        FTADDCOL should be called prior to FTPUT for explicit formatting.;; PROCEDURES CALLED;       FTADDCOL, FTINFO, FTSIZE, SXADDPAR, SXPAR(); HISTORY:;       version 1  D. Lindler July, 1987;       Allow E format         W. Landsman          March 1992;       Write in F format if E format will overflow    April 1994;       Update documentation W. Landsman   January 1996;       Allow 1 element vector  W. Landsman   March 1996;       Adjust string length to maximum of input string array   June 1997;       Work for more than 32767 elements August 1997;       Converted to IDL V5.0   W. Landsman   September 1997;       Updated call to the new FTINFO   W. Landsman   May 2000;       Fix case where header does not have any columns yet W.Landsman Sep 2002;       Assume since V5.2, omit fstring() call  W. Landsman April 2006;- On_error,2 compile_opt idl2 if N_params() LT 5 then begin    print,'Syntax - FTPUT, htab, tab, field, row, values, [nulls]'    return endif nrow = N_elements(row)        ;Number of elements in row vector nullflag = N_elements(nulls) GT 0         ;Null values supplied? ftsize,h,tab,ncols,nrows,tfields,allcols,allrows     ; Get size of table; Make values a vector if scalar supplied s = size(values) & ndim = s[0] & type = s[ndim+1] if ndim gt 1 then $        message,'Input values must be scalar or 1-D array' sz_row = size(row) scalar = sz_row[0] EQ 0 v = values if nullflag then nullvals = nulls; Get info on field specified ftinfo,h,ft_str, Count = tfields if tfields EQ 0 then ipos = -1 else begin  if size(field,/TNAME) EQ 'STRING' then begin    field = strupcase(strtrim(field,2))    ttype = strtrim(ft_str.ttype,2)    ipos = where(ttype EQ field, Npos) endif else ipos = field -1 endelse if ipos[0] EQ -1 then begin            ;Does it exist?; Add new column if it doesn't exist          if type EQ 7 then type = (-max(strlen(v)))          ftaddcol, h, tab, field, type          ftinfo,h,ft_str          ftsize,h,tab,ncols,nrows,tfields,allcols,allrows          ipos = tfields-1 endif  ipos = ipos[0] tbcol = ft_str.tbcol[ipos]-1                   ;IDL starts at zero not one.; Convert input vector to string array n = N_elements(v) data = string(replicate(32b, ft_str.width[ipos], n ) ) if nrow GT 1 then if (nrow NE n) then $        message,'Number of specified rows must equal number of values' fmt = strupcase(strtrim(ft_str.tform[ipos],2)) fmt1 = strmid(fmt,0,1) if (fmt1 EQ 'D') or (fmt1 EQ 'E') then begin  ;Need at least 6 chars for E fmt        point = strpos(fmt,'.')        wid = fix(strmid(fmt,1,point-1))        decimal = fix(strmid(fmt,point+1,1000))        if wid-decimal LT 6 then fmt = 'F' + strmid(fmt,1,1000) endif fmt = '(' + fmt + ')' data = string(v, FORMAT = fmt); insert null values if nullflag GT 5 then begin        bad = where(nullvals, Nbad)        if Nbad GT 0 then for i = 0L, Nbad-1 do data[bad[i]] = tnull end;; Do we need to increase the number of rows in the table?;if scalar then maxrow = row+n else maxrow = max(row) + 1if maxrow GT allrows then begin         ;expand table size    ;    ;  Create a replacement table with the required number of rows.    ;    newtab = replicate(32b,allcols,maxrow)    newtab[0,0] = tab    ;    ;  Move the new table into the old table.    ;    tab = newtabend if maxrow GT nrows then sxaddpar,h,'naxis2',maxrow;;  Now insert into table.;  if scalar then tab[tbcol,row] = byte(data) $  else for i = 0L,N_elements(row)-1 do tab[tbcol,row[i]] = byte(data[i]);;  Return to calling routine.; return end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -