pro convert_mosfire_to_specpro, maskname, band, ditherstep ; DESCRIPTION ; ; Wrapper to convert MOSFIRE spectra reduced with the MOSFIRE DRP (Nick ; K.) to the format readable by specpro.pro. ; The only inputs is the mask name and the band on which the observation is done. ; ; ; INPUTS ; ; maskname - Name of Mask ; band - Band in which the mask is observed ; ditherstep - The dither step in arcsec used (e.g. 1.25 for +/- 1.25, i.e. 2.5 in MAGMA) ; ; ; OUTPUTS ; ; 1. A spec2d file which is readable by SPECPRO ; 2. A spec1d file (extracted from the input spec2d file, which is readable by SPECPRO ; 3. The info file for SPECPRO ; ; DEPENDENCIES ; ; - extract1d_gen.pro ; ; VERSIONS ; ; *1.0 - 12/18/12 (AF, afaisst@phys.ethz.ch) ; First version ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;if n_elements(out1dname) eq 0 then begin ; out1dname = 'spec1d.mask.000.object.fits' ;endif ;if n_elements(out2dname) eq 0 then begin ; out2dname = 'spec2d.mask.000.object.fits' ;endif ;--------- READ IN SLIT FILE AN PICK IMPORTANT COLUMNS -------- ; note: the slit list must be the one created by MAGMA slitfile = string(format='(a,a)',maskname,'_SlitList.txt') print,string(format='(a,a)','Slit List file used: ',slitfile) readcol,slitfile,f='d,d,d,d,d,d,d,d,d,a,d,d,d,d,d,d,d,d',slitnbrs,v1,v2,v3,v4,v5,v6,v7,widths,objects,v8,dcenters,v9,v10,v11,v12,v13,v14,/silent nbrofslits = n_elements(slitnbrs) ;for ii=6,6 do begin for ii=0,nbrofslits-1 do begin ;for ii=28,nbrofslits-1 do begin ; ----------- EXTRACT SLIT INFORMATION ----------- ; extract slit parameters slitnbr=slitnbrs[ii] dY_arcsec=widths[ii] object=objects[ii] dcenter_arcsec=dcenters[ii] ; create names spec2dname = string(format='(a,a,a,a,a,a)',maskname,'_',band,'_',object,'_eps.fits') ivar2dname = string(format='(a,a,a,a,a,a)',maskname,'_',band,'_',object,'_ivar.fits') out1dname = string(format='(a,a,a,I03,a,a,a)','spec1d.',maskname,'.',slitnbr,'.',object,'.fits') out2dname = string(format='(a,a,a,I03,a,a,a)','spec2d.',maskname,'.',slitnbr,'.',object,'.fits') outinfoname = string(format='(a,a,a,I03,a,a,a)','info.',maskname,'.',slitnbr,'.',object,'.dat') spec1dname = string(format='(a,a,a,I03,a,a,a)','spec1d.',maskname,'.',slitnbr,'.',object,'.txt') print,string(format='(a,I)','Processing Slit Number: ',ii+1) print,string(format='(a,a)','Name of spec2d input file: ',spec2dname) print,string(format='(a,a)','Name of spec2d output file ',out2dname) print,string(format='(a,a)','Name of spec1d output file ',out1dname) print,string(format='(a,a)','Name of info output file ',outinfoname) ; read in 2d files spec2d = readfits(spec2dname,hdr2d,/silent) ivar2d = readfits(ivar2dname,/silent) ;;; create matrix with lambda ;;; lambda0 = sxpar(hdr2d,'CRVAL1') AperPix = sxpar(hdr2d,'CD1_1') sz=size(spec2d,/dimensions) ; width in dispersion (X) direction in Angstroms dX = AperPix*sz[0] ; ---------- CREATE GRID IN LAMBDA (1D AND 2D) -------- lgrid = findgen(sz[0])*0 lmin=lambda0 lmax=lambda0+dX lstep=(lmax-lmin)/sz[0] for jj=1,sz[0] do begin lgrid[jj-1] = lambda0+(jj-1)*lstep endfor lambda2d = fltarr(sz[0],sz[1]) for kk = 0, sz[1]-1 do begin lambda2d[*,kk] = lgrid endfor ; --------- CREATE 2D SPECTRUM ----------------- ; set -NaN to zero. szivar = size(ivar2d,/dimensions) for jj=0,szivar[1]-1 do begin ivartmp = ivar2d[*,jj] ivarnan = where(~finite(ivartmp)) ivartmp[ivarnan]=0 ivar2d[*,jj]=ivartmp endfor out2d = {flux:double(spec2d), lambda:double(lambda2d), ivar:ivar2d} mwrfits, out2d, out2dname, /create ;--------- GET POSITION OF OBJECT ------ ; get pixel scale in spatial direction (Y) dY = sz[1] ;ArcsecperPix=dY_arcsec/dY ArcsecperPix=0.18 ; get Y coordinate (spatial) of object in pixels ;Y_object = (dY_arcsec/2+dcenter_arcsec)/ArcsecperPix Y_object = dY - (dY_arcsec/2 - dcenter_arcsec)*(1/ArcsecperPix) - ditherstep*(1/ArcsecperPix) ; set extraction width fwhm_arcsec = 2 fwhm = fwhm_arcsec/ArcsecperPix ;--------- EXTRACT 1D SPECTRUM AND WRITE TO FILE ------ new_spec1d=extract1d_gen(out2dname,Y_object,fwhm) ;new_spec1d=extract1d_gen(spec2dname,Y_object,fwhm,/horne) ;try directly with out2d ;help,new_spec1d dim_spec = size(new_spec1d.spec) spec1d = {flux:dblarr(dim_spec[1]), ivar:dblarr(dim_spec[1]), lambda:dblarr(dim_spec[1])} spec1d.flux = new_spec1d.spec spec1d.lambda = new_spec1d.lambda spec1d.ivar = new_spec1d.ivar mwrfits,spec1d,out1dname,/create ;--------- .... OR CONVERT SPEC 1D FILE ----- ;readcol,spec1dname,f='d,d,d',lambda,flux,ivar ;out1d = {flux:flux, lambda:lambda, ivar:ivar} ;mwrfits, out1d, out1dname, /create ; ---------- CREATE INFO FILE ------- openw,LUN,outinfoname,/get_lun head = string(format='(a,a,a)','# info file for ',out1dname,'.fits') printf,LUN,head,FORMAT='(a)' printf,LUN,string(format='(a,1X,a)','ID',object),FORMAT='(a)' printf,LUN,string(format='(a,1X,a)','name',object),FORMAT='(a)' printf,LUN,string(format='(a,1X,a)','slitno',slitnbr),FORMAT='(a)' printf,LUN,string(format='(a,1X,a)','extractpos',Y_object),FORMAT='(a)' printf,LUN,string(format='(a,1X,a)','extractwidth',fwhm),FORMAT='(a)' close,LUN ; some units stay open after readfits(). ; this command is basically to close all the open units. close,/all endfor end ;convert_mosfire_to_specpro