;************************************************************************** ;first thing is to create the distortion coefficent array. ;this needs to be done once, correctly. Current coefficients were calculated ;using 5 stellar spectra that were coadded. Each spectrum was taken at a differant slit height, and thus includes pointing errors. ;Since then we have made a mask with a set of 8 pinholes. there are some flats taken with this mask, but the routine (findcoeff2.pro)will need to be changed to include the extra spectra. ;For now, ignore this step and just use the coefficients I have supplied. comb=readfits('comb1.fits',comb_hd) comb=comb(25:2072,*) dark=readfits('dark201x1.fits',dark_hd) dark= dark(25:2072,*) comb=rotate(comb,4) dark=rotate(dark,4) mask=(dark gt 770) * dark - median(dark(*,0:1024)) comb=comb-mask .run findcoeff2 findcoeff,comb,coeff ;************************************************************************** ;START HERE datafile='/dsk/b/andy1/data2/esi_23mar01/esi0164_0166.fit flatfile='/dsk/b/andy1/data2/esi_23mar01/flat.fits darkfile='/dsk/b/andy1/data2/esi_23mar01/dark201x1.fits arcfile='/dsk/b/andy1/data2/esi_23mar01/esi0053.fits arc2file='/dsk/b/andy1/data2/esi_23mar01/esi0058.fits reffile='/dsk/b/andy1/data2/esi_23mar01/esi0087.fits' ref2file='/dsk/b/andy1/data2/ESI_07mar00/rawdata/esi0062.fits';bd+22 2642 ref3file='/dsk/b/andy1/data2/ESI_07mar00/rawdata/esi0025.fits';Feige25 qsofile='/dsk/b/andy1/data2/esi_23mar01/esi0171.fits standardfile='/b/andy1/standard_stars/bd33a.oke' standardfile2='/b/andy1/standard_stars/bd33a.sto' ;read in data *********************************************************** data=readfits(datafile,datahd) flat=readfits(flatfile,flat_hd) dark=readfits(darkfile,dark_hd) arc=readfits(arcfile,arc_hd) arc2=readfits(arc2file,arc2_hd) ref=readfits(reffile,ref_hd) ref2=readfits(ref2file,ref2_hd) ref3=readfits(ref3file,ref3_hd) qso=readfits(qsofile,qso_hd) ;trim overscan********************************************************** ;data=data(25:2072,*) ;flat=flat(25:2072,*) dark= dark(25:2072,*) arc=arc(25:2072,*) arc2=arc2(25:2072,*) ref=ref(25:2072,*) ref2=ref2(25:2072,*) ref3=ref3(25:2072,*) qso=qso(25:2072,*) :or fix the size************************************************************ data=congrid(data,2048,4096) ;dark=congrid(dark,2048,4096) flat=congrid(flat,2048,4096) ;rotate*********************************************************** data=rotate(data,4) flat=rotate(flat,4) dark=rotate(dark,4) arc=rotate(arc,4) arc2=rotate(arc2,4) ref=rotate(ref,4) ref2=rotate(ref2,4) ref3=rotate(ref3,4) qso=rotate(qso,4) ;subtract bias*********************************************************** ;data=data-dark ;flat=flat-dark arc=arc-dark arc2=arc2-dark qso=qso-dark ref=ref-dark ref2=ref2-dark ref3=ref3-dark ;create hot pixel mask and multiply************************************* ;mask=dark*0+(dark lt 800) ;mask = (mask gt 0.9) mask=data*0+1 ;mask(2646:4095,421:441)=0 ;hot column mask(2646:4095,410:441)=0 ;mask(3875:3914,58:110)=0 ;hot pixel mask(3782:4003,0:217)=0 data=data*mask flat=flat*mask arc=arc*mask arc2=arc2*mask ref=ref*mask ;zap if neccesary ***************************************** qzap,data,data qzap,ref,ref qzap,arc,arc qzap,arc2,arc2 ;write files***************************************** writefits,"esi0164_0166_zb.fit",data,datahd writefits,"esi0087_zb.fits",ref,ref_hd writefits,"esi0053_zb.fits",arc,arc_hd writefits,"esi0058_zb.fits",arc2,arc2_hd ;and if things break***************************************** data=readfits ; model and remove intra-order scattered light************************* .run scatter_model2 scatter_model2,flat,scattermodF scatter_model2,data,scattermodD scatter_model2,ref,scattermodR flat=flat-scattermodF data=data-scattermodD ref=ref-scattermodR data=data*mask flat=flat*mask ref=ref*mask ; flatten the flat and divide out *********************************************** .run flat_new flat_new,flat,flatout flatout=flatout+ 1e10 * (flatout lt 0.1) data=data/flatout*mask data=data *( data le 60000 and data ge -1000) ref=ref/flatout*mask ref=ref* (ref le 60000 and ref ge -1000) ;write files***************************************** writefits,"esi0164_0166_zbf.fit",data,datahd writefits,"esi0087_zbf.fits",ref,ref_hd writefits,"esi0053_zbf.fits",arc,arc_hd data=readfits("esi0164_0166_zbf.fit",datahd) ref=readfits("esi0087_zbf.fits",ref_hd) arc=readfits("esi0053_zbf.fits",arc,arc_hd) arc2=readfits("esi0058_zb.fits",arc2_hd) ;rectify*********************************************************** ;this is where you would include a better coefficient fit...... coeff=fltarr(4, 10, 5) openr,1,'rectify_coeff.txt' readf,1,coeff close,1 .run a_maporders_try2 maporders,data,temp,coeff data=temp ;maporders,flat,temp,coeff ;flat=temp maporders,arc,temp,coeff arc=temp maporders,arc2,temp,coeff arc2=temp maporders,ref,temp,coeff ref=temp maporders,mask,temp,coeff mask=temp ;write files***************************************** writefits,"esi0164_0166_zbfr_B.fit",data,datahd writefits,"esi0087_zbfrr_B.fits",ref,ref_hd writefits,"esi0053_zbfrr_B.fits",arc,arc_hd writefits,"esi0058_zbfrr_B.fits",arc2,arc2_hd ;and if things crash, read files***************************************** data=readfits("esi0164_0166_zbfr.fit",datahd) ref=readfits("esi0087_zbfr.fits",ref_hd) arc=readfits("esi0053_zbfr.fits",arc,arc_hd) arc2=readfits("esi0058_zbfr.fits",arc2_hd) ;get wavelength scale******************************************* ;in order to use the b-spline based sky subtraction routines we will need an accurate sky model that give a wavelength for the center of *every* pixel. .run lamp_esi .run lambdawpeak_esi .run lambda_2dB ;.run /b/andy1/old_cvs/cvs/utils/pro/tset/traceset2pix ;read in old model : lambda_model=readfits('/b/andy1/data2/rectify/lambda_model_9_20_01.fits',lambda_modelhd) ;creat rough model called wave: wave=fltarr(4096,10) for i = 0,9 do wave(*,i)=rebin(lambda_model(*,(i*180+70):(i*180+90)),4096,1) ;.run bandaid ;bandaid,data,data ;bandaid,ref,ref ;bandaid,arc,arc ;bandaid,arc2,arc2 ;reference linelists that I have edited for "good" lines. filename10='/b/andy1/linelists/order10_mike.dat' filename9='/b/andy1/linelists/order9_mike.dat' filename8='/b/andy1/linelists/order8_mike.dat' filename7='/b/andy1/linelists/order7_mike.dat' filename6='/b/andy1/linelists/order6_mike.dat' ;filename6='/b/andy1/linelists/HeNe_CuAr_Xe_esi6_3_21_02.dat' ;filename6='/b/andy1/linelists/HeNe_CuAr__Xe_.dat' ;filename7='/b/andy1/linelists/HeNe_CuAr_esi7.dat' ;filename8='/b/andy1/linelists/HeNe_CuAr_esi8.dat' ;filename9='/b/andy1/linelists/HeNe_CuAr_esi9.dat' ;filename10='/b/andy1/linelists/HeNe_CuAr_esi10.dat' filename11='/b/andy1/linelists/CuAr_esi11.dat' filename12='/b/andy1/linelists/CuAr_esi12.dat' filename13='/b/andy1/linelists/CuAr_esi13.dat' filename14='/b/andy1/linelists/CuAr_esi14.dat' filename15='/b/andy1/linelists/CuAr_esi15.dat' arcim=arc2+arc lambda_2dB,arcim,model6,wave,coeffarr6,residuals=1,peaks=0,filename=filename6,stop=0,order=6,nfit=5,fit=1,ncfit=1,navg=31,print=0,bin=3 lambda_2dB,arcim,model6b,model6(*,70:79),coeffarr6b,residuals=1,peaks=0,filename=filename6,stop=0,order=6,nfit=5,fit=1,ncfit=1,navg=31,print=0,bin=3 lambda_2dB,arcim,model6b,wave,coeffarr6b,residuals=1,peaks=0,filename=filename6,stop=0,order=6,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=10 lambda_2dB,arcim,model7,wave,coeffarr7,residuals=1,peaks=0,filename=filename7,stop=0,order=7,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=7 arcim=arc2 lambda_2dB,arcim,model7b,model7(*,70:79),coeffarr7b,residuals=1,peaks=0,filename=filename7,stop=0,order=7,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=3 arcim=arc lambda_2dB,arcim,model8,wave,coeffarr8,residuals=1,peaks=0,filename=filename8,stop=0,order=8,nfit=5,fit=1,ncfit=1,navg=1,print=0 lambda_2dB,arcim,model8t,wave,coeffarr8t,residuals=0,peaks=0,filename=filename8,stop=0,order=8,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=3,reject=1 lambda_2dB,arcim,model8tt,wave,coeffarr8tt,residuals=0,peaks=0,filename=filename8,stop=0,order=8,nfit=5,fit=0,ncfit=1,navg=1,print=0,bin=3,reject=0 lambda_2dB,arcim,model9b,wave,coeffarr9b,residuals=1,peaks=0,filename=filename9,stop=0,order=9,nfit=5,fit=0,ncfit=1,navg=1,print=0,bin=7 lambda_2dB,arcim,model10,wave,coeffarr10,residuals=1,peaks=0,filename=filename10,stop=0,order=10,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=3 lambda_2dB,arcim,model11,wave,coeffar11,residuals=1,peaks=0,filename=filename11,stop=0,order=11,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=3 lambda_2dB,arcim,model11bttt,model11(*,70:79),coeffar11bttt,residuals=0,peaks=0,filename=filename11,stop=0,order=11,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=1,reject=1 lambda_2dB,arcim,model12,model11(*,70:79),coeffarr12,residuals=1,peaks=0,filename=filename12,stop=0,order=12,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=7 lambda_2dB,arcim,model12b,wave,coeffarr12b,residuals=1,peaks=0,filename=filename12,stop=0,order=12,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=1 lambda_2dB,arcim,model13,wave,coeffarr13,residuals=1,peaks=0,filename=filename13,stop=0,order=13,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=7 lambda_2dB,arcim,model14,wave,coeffarr14,residuals=1,peaks=0,filename=filename14,stop=0,order=14,nfit=5,fit=1,ncfit=1,navg=1,print=0,bin=7 ;compare i=4 splot,coeffar11bt(i,*),ps=4 soplot,coeffar11btt(i,*),color=200 soplot,coeffar11b(i,*) i=4 splot,coeffarr8tt(i,*),ps=4 soplot,coeffarr8t(i,*),color=200 soplot,coeffarr8(i,*) plot,model8(2048,*)-median(model8(2048,*)) for i =0,20 do oplot,model8(200*i,*)-median(model8(200*i,*)),color=256/(i+1) plot,model10b(2048,*)-median(model10b(2048,*)) for i =0,20 do oplot,model10b(200*i,*)-median(model10b(200*i,*));,color=256/(i+1) ;save the model!**************************************************************************************** new_lambda_model=fltarr(4096,2048) i=1 new_lambda_model(*,i*180:i*180+169)=model14 i=2 new_lambda_model(*,i*180:i*180+169)=model13 i=3 new_lambda_model(*,i*180:i*180+169)=model12 i=4 new_lambda_model(*,i*180:i*180+169)=model11 i=5 new_lambda_model(*,i*180:i*180+169)=model10 i=6 new_lambda_model(*,i*180:i*180+169)=model9 i=7 new_lambda_model(*,i*180:i*180+169)=model8 i=8 new_lambda_model(*,i*180:i*180+169)=model7b i=9 ;new_lambda_model(*,i*180:i*180+169)=model6 writefits,'lambda_model_3_28_02.fits',new_lambda_model old_lambda_model=readfits('lambda_model_3_20_02.fits') ;calculate inverse variance************************************************************************************ print,'calculate inverse variance' invvar=1/data *(data ne 0) ;subtract the sky**************************************************************************************** .run skysub_esi.pro skyrows1=findgen(20)+10 skyrows2=findgen(20)+130 ;skyrows=findgen(12)+3 data1=data data=ref data=data1 i=9 galspec=data(*,i*180:i*180+169) model=lambda_model(*,i*180:i*180+169) ;model=model6 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky6 atv,objnosky6 i=8 galspec=data(*,i*180:i*180+169) model=lambda_model(*,i*180:i*180+169) ;model=model7b skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky7 atv,objnosky7 i=7 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model8 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky8 ;atv,objnosky8 i=6 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model9 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky9 atv,objnosky9 i=5 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model10 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky10 atv,objnosky10 i=4 galspec=data(*,i*180:i*180+169) ;model=old_lambda_model(*,i*180:i*180+169) model=model11 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky11 atv,objnosky11 i=3 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model12 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky12 atv,objnosky12 ;objnosky12=galspec i=2 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model13 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky13 atv,objnosky13 i=1 galspec=data(*,i*180:i*180+169) ;model=lambda_model(*,i*180:i*180+169) model=model14 skysub,galspec,galspec, model, model, skyrows=[skyrows1,skyrows2], objnosky=objnosky14 ;atv,objnosky14 ;save sky subtracted data******************************************************************************** data_nosky=fltarr(4096,2048) i=1 data_nosky(*,i*180:i*180+169)=objnosky14 i=2 data_nosky(*,i*180:i*180+169)=objnosky13 i=3 data_nosky(*,i*180:i*180+169)=objnosky12 i=4 data_nosky(*,i*180:i*180+169)=objnosky11 i=5 data_nosky(*,i*180:i*180+169)=objnosky10 i=6 data_nosky(*,i*180:i*180+169)=objnosky9 i=7 data_nosky(*,i*180:i*180+169)=objnosky8 i=8 data_nosky(*,i*180:i*180+169)=objnosky7bb i=9 ;data_nosky(*,i*180:i*180+169)=objnosky6 data_sky=data-data_nosky ;ref_nosky=data_nosky ;writefits,'3C323.1_data_nosky_3_29_02.fits',data_nosky ;writefits,'refstar_data_nosky_3_29_02.fits',ref_nosky data_nosky2=readfits('3C323.1_data_nosky_3_28_02.fits') data_nosky3=readfits('3C323.1_data_nosky_3_29_02.fits') atv,data_nosky3 ;extract**************************************************************************************** refspec7=total(objnosky7bb(*,63:96),2) refspec8=total(objnosky8(*,63:96),2) refspec9=total(objnosky9(*,63:96),2) refspec10=total(objnosky10(*,63:96),2) refspec11=total(objnosky11(*,63:96),2) refspec12=total(objnosky12(*,63:96),2) refspec13=total(objnosky13(*,63:96),2) refspec14=total(objnosky14(*,63:96),2) refspec7=smooth(refspec7,711,/edge_truncate) refspec8=smooth(refspec8,711,/edge_truncate) refspec9=smooth(refspec9,711,/edge_truncate) refspec10=smooth(refspec10,711,/edge_truncate) refspec11=smooth(refspec11,711,/edge_truncate) refspec12=smooth(refspec12,711,/edge_truncate) refspec13=smooth(refspec13,711,/edge_truncate) refspec14=smooth(refspec14,711,/edge_truncate) fspec7=rspec7/refspec7 fspec8=rspec8/refspec8 fspec9=rspec9/refspec9 fspec10=rspec10/refspec10 fspec11=rspec11/refspec11 fspec12=rspec12/refspec12 fspec13=rspec13/refspec13 fspec14=spec14/refspec14 fwave=fltarr(4096,10) for i=1,8 do fwave(*,i)=lambda_model(*,i*180+85) z=0.264 fwave=fwave/(1+z) splot,fwave(*,8),smooth(fspec7,9) soplot,fwave(*,7),smooth(fspec8,9) soplot,fwave(*,6),smooth(fspec9,9) soplot,fwave(*,5),smooth(fspec10,9) soplot,fwave(*,4),smooth(fspec11,9) soplot,fwave(*,9),smooth(fspec12,9) soplot,fwave(*,2),smooth(fspec13,9) fspec7=fspec7* (fspec7 gt 0 and fspec7 lt .025) fspec8=fspec8* (fspec8 gt 0 and fspec8 lt .025) fspec9=fspec9* (fspec9 gt 0 and fspec9 lt .025) fspec10=fspec10* (fspec10 gt 0 and fspec10 lt .025) fspec11=fspec11* (fspec11 gt 0 and fspec11 lt .025) fspec12=fspec12* (fspec12 gt 0 and fspec12 lt .025) fspec13=fspec13* (fspec13 gt 0 and fspec13 lt .025) ;**************************************************************************************** temp=fltarr(4096,510) temp(*,0:169)=objnosky7 temp(*,170:339)=objnosky7c temp(*,340:509)=galspec atv,temp temp=fltarr(4096,340) temp(*,0:169)=objnosky13 temp(*,170:339)=wave ;temp(*,340:509)=galspec atv,temp